Integrowanie modele przy użyciu programu Visual Studio Modelbus
Visual StudioModelBus zapewnia metodę tworzenia łącza między modelami i z innymi narzędziami do modeli.Na przykład możesz połączyć modele języka specyficzne dla domeny (DSL) i modeli UML.Można utworzyć zintegrowany zestaw DSLs.
ModelBus pozwala utworzyć unikatowy odwołanie do modelu lub do określonego elementu wewnątrz modelu.To odwołanie mogą być przechowywane poza modelu, na przykład w elemencie innego modelu.Gdy przy okazji później, narzędzie chce uzyskać dostęp do elementu, infrastruktury Model Bus odpowiedni model obciążenia i zwraca element.Jeśli chcesz, można wyświetlić model do użytkownika.Jeśli plik nie jest dostępny w jego poprzedniej lokalizacji, ModelBus, poprosi użytkownika, aby go znaleźć.Jeśli użytkownik znajduje się plik, ModelBus ustalą wszystkie odwołania do tego pliku.
[!UWAGA]
W bieżącym Visual Studio realizacji ModelBus, połączone modele muszą być elementów w tym samym Visual Studio roztworu.
Dodatkowe informacje oraz przykładowy kod zobacz:
Visual Studio wizualizacji i witryny sieci Web modelowania SDK (VMSDK)
Zapewnienie dostępu do linii DSL
Przed utworzeniem ModelBus odwołania do modelu lub jego elementów, należy najpierw zdefiniować ModelBusAdapter modem DSL.Najprostszym sposobem wykonania tego zadania jest użycie Visual Studio rozszerzenie magistrali modelu, który dodaje poleceń do projektanta DSL.
Aby udostępnić definicji DSL, aby Model Bus
Pobierz i zainstaluj rozszerzenie programu Visual Studio Model Bus, chyba że już zostały zainstalowane.Aby uzyskać więcej informacji, zobacz wizualizacji i modelowania SDK.
Otwórz plik definicji DSL.Kliknij prawym przyciskiem myszy na powierzchnię projektu, a następnie kliknij przycisk Włączyć Modelbus.
W oknie dialogowym wybierz I chcesz udostępnić ten DSL do ModelBus.Obie opcje można wybrać, jeśli chcesz, aby ten DSL, aby udostępnić jego modeli i zużyje odwołania do innych DSLs.
Click OK.Nowy projekt "ModelBusAdapter" dodaje się do roztworu DSL.
Jeśli chcesz dostępu DSL z szablonu tekstu, należy zmodyfikować AdapterManager.tt w nowym projekcie.Pomiń ten krok, jeśli chcesz uzyskać dostęp do linii DSL z innego kodu, takie jak polecenia i programy obsługi zdarzeń.Aby uzyskać więcej informacji, zobacz W szablonie tekstu przy użyciu programu Visual Studio ModelBus.
Zmiana klasy podstawowej z AdapterManagerBase do VsTextTemplatingModelingAdapterManager.
W pobliżu końca pliku należy wstawić ten atrybut dodatkowych na początku klasy AdapterManager:
[Microsoft.VisualStudio.Modeling.Integration.HostSpecific(HostName)]
W programie project odniesienia ModelBusAdapter, dodać Microsoft.VisualStudio.TextTemplating.Modeling.11.0.
Jeśli chcesz uzyskać dostęp DSL, zarówno z szablonów tekst, jak i z innego kodu, musisz dwie karty: jeden zmodyfikowane, a drugi niemodyfikowane.
Kliknij przycisk Transform wszystkie szablony.
Odbuduj roztworu.
Obecnie jest możliwe dla ModelBus otworzyć wystąpień tego modemu DSL.
Folder ModelBusAdapters\bin\* zawiera zestawy, zbudowany przez Dsl projektu i ModelBusAdapters projektu.Aby odwołać się za tym DSL od innego DSL, powinien importować tych zestawów.
Upewnienie się, że elementy można się odwoływać
Visual StudioKarty ModelBus umożliwia identyfikację domyślnie identyfikator guid elementu.Identyfikatory te muszą zatem utrwalone w pliku modelu.
Aby zapewnić, że element identyfikatory są zachowywane
Otwórz DslDefinition.dsl.
W Eksploratorze DSL, rozwiń węzeł Zachowanie serializacji Xml, następnie Dane klasy.
Dla każdej klasy, do którego chcesz utworzyć Model Bus odwołuje się:
Kliknij węzeł klasy i upewnij się, że w oknie dialogowym właściwości Szeregować identyfikator jest ustawiona na true.
Alternatywnie użycie nazwy elementu w celu zidentyfikowania elementy zamiast identyfikatorów GUID, można zastąpić części generowanych kart.Zastąpić następujących metod w klasie karty:
Zastąpić GetElementId zwrócić identyfikatora, który chcesz użyć.Metoda ta jest wywoływana podczas tworzenia odwołania.
Zastąpić ResolveElementReference zlokalizować prawidłowego elementu z odwołania do modelu magistrali.
Uzyskiwanie dostępu do linii DSL od innego DSL
Model bus odniesienia można przechowywać w właściwości domeny w DSL i można napisać kod niestandardowy, który wykorzystuje je.Można również zlecić użytkownik powinien utworzyć odwołanie do modelu magistrali przez pobrania pliku modelu oraz elementu w nim.
Aby włączyć DSL używać odwołań do innego DSL, najpierw należy go konsumentów model bus odwołań.
Aby włączyć DSL zużyje odniesienia do narażonych DSL
Na diagramie definicji DSL, kliknij prawym przyciskiem myszy głównej części diagramu, a następnie kliknij przycisk Włączyć Modelbus.
W oknie dialogowym wybierz I chcesz włączyć ten model do spożywania odwołania magistrali modelu.
W programie project Dsl zużywające DSL należy dodać następujące zespoły z odwołaniami do projektu.Zespoły te (pliki .dll) można znaleźć w katalogu ModelBusAdapter\bin\ * narażonych DSL.
Montaż narażonych DSL, np.Fabrikam.FamilyTree.Dsl.dll
Zgromadzenia karty magistrali narażonych modelu, na przykładFabrikam.FamilyTree.ModelBusAdapter.dll
Dodaj następujące.NET zestawów do odwołania projektu zużywające projektu DSL.
Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0.dll
Microsoft.VisualStudio.Modeling.Sdk.Integration.Shell.11.0.dll
Do przechowywania odwołanie modelu magistrali we właściwości domeny
W definicji DSL zużywające DSL Dodawanie właściwości domeny do klasy domeny i ustawić jego nazwę.
Właściwości z właściwością domeny zaznaczone, zdefiniuj w oknie typu do ModelBusReference.
Na tym etapie kodu programu można ustawić wartość właściwości, ale jest przeznaczona tylko do odczytu w oknie dialogowym właściwości.
Można zezwolić użytkownikom ustawić właściwość z wyspecjalizowanych Edytor odniesienia ModelBus.Istnieją dwie wersje tego edytora lub próbnika: jeden zezwala użytkownikom na Wybieranie pliku modelu i w innym zezwala użytkownikom na Wybieranie pliku modelu i element modelu.
Aby umożliwić użytkownikowi ustawić odwołanie do modelu magistrali we właściwości domeny
Kliknij prawym przyciskiem myszy właściwości domeny, a następnie kliknij przycisk ModelBusReference edytować określone właściwości.Otwiera okno dialogowe.Jest to Model Bus próbnika.
Wybierz odpowiednie Kind of ModelBusReference: model lub element wewnątrz modelu.
W pliku ciąg filtru okno dialogowe, wprowadź ciąg takich jak Family Tree files |*.ftree.Subsitute rozszerzenie pliku narażonych linii DSL.
Jeśli wybrano odwołać się za element w modelu, można dodać listy typów, które użytkownik może wybrać, na przykład Company.FamilyTree.Person.
Kliknij przycisk OK, a następnie kliknij przycisk Transform wszystkie szablony na pasku narzędzi Eksploratora roztworu.
Przestroga Jeśli nie wybrano prawidłowy model lub podmiot, przycisk OK będzie miało żadnego efektu, mimo że mogą być wyświetlane włączone.
Jeśli określono listę typów docelowych, takich jak Company.FamilyTree.Person, trzeba dodać odwołanie zestawu do projektu DSL, odwoływanie się do biblioteki DLL TARGET DSL, na przykład Company.FamilyTree.Dsl.dll
Aby przetestować odwołanie modelu magistrali
Tworzenie DSLs narażonych i zużywające.
Uruchom jeden z DSLs w trybie doświadczalnych naciskając klawisz F5 lub CTRL + F5.
W programie project debugowanie w wystąpieniu doświadczalnych Visual Studio, dodać pliki, które są wystąpieniami każdego DSL.
[!UWAGA]
Visual StudioOdniesienia do modeli, które są elementy w tym samym tylko można rozwiązać, ModelBus Visual Studio roztworu.Na przykład nie można utworzyć odwołanie do pliku modelu w innej części systemu plików.
Utwórz niektóre elementy i łącza w instancji narażonych DSL i zapisz go.
Otwórz wystąpienie zużywające DSL i wybierz element modelu, który ma właściwość modelu odniesienia magistrali.
W oknie właściwości kliknij dwukrotnie właściwość modelu magistrali odniesienia.Zostanie otwarte okno dialogowe próbnika.
Kliknij przycisk przeglądać i wybierz wystąpienie narażonych DSL.
Za pomocą próbnika będzie również umożliwiają wybierz element w modelu, jeśli określony rodzaj specyficzne dla elementu modelu magistrali odniesienia.
Tworzenie odwołania do kodu programu
Odwołanie do modelu lub element wewnątrz modelu, należy utworzyć ModelBusReference.Istnieją dwa rodzaje z ModelBusReference: model odniesienia i odwołania do elementu.
Aby utworzyć odwołanie do modelu, należy AdapterManager DSL, którego wzór jest instancji i nazwę pliku lub Visual Studio elementu projektu modelu.
Aby utworzyć odwołanie do elementu, potrzebna jest karta pliku modelu i element, który chcesz odwołać się do.
[!UWAGA]
Z Visual Studio ModelBus, można utworzyć odwołania tylko do elementów w tym samym Visual Studio roztworu.
Importowanie zestawów narażonych DSL
W projekcie zużywające dodać odwołania do zestawów DSL i ModelBusAdapter narażonych DSL.
Na przykład załóżmy że chcesz przechowywać odniesienia ModelBus w elementach MusicLibrary DSL.Odwołania ModelBus będzie odnosić się do elementów FamilyTree DSL.W Dsl projektu roztworu MusicLibrary w węźle odniesienia Dodaj odwołania do następujących zestawów:
Fabrikam.FamilyTree.DSL.dll - DSL narażonych.
Fabrikam.FamilyTree.ModelBusAdapters.dll - karta ModelBus narażonych DSL.
Microsoft.VisualStudio.Modeling.SDK.Integration.11.0
Microsoft.VisualStudio.Modeling.SDK.Integration.Shell.11.0
Zespoły te znajdują się w ModelBusAdapters projektu narażonych DSL, pod bin\*.
W pliku kodu, gdzie będzie Tworzenie odwołań będą zazwyczaj mają importować te obszary nazw:
// The namespace of the DSL you want to reference:
using Fabrikam.FamilyTree; // Exposed DSL
using Fabrikam.FamilyTree.ModelBusAdapters;
using Microsoft.VisualStudio.Modeling.Integration;
using System.Linq;
...
Aby utworzyć odwołanie do modelu
Aby utworzyć odwołanie do modelu, dostęp AdapterManager dla narażonych DSL i użyć go do utworzenia odwołania do modelu.Można określić albo ścieżka pliku lub EnvDTE.ProjectItem.
Z AdapterManager można uzyskać adaptera, który zapewnia dostęp do poszczególnych elementów w modelu.
[!UWAGA]
Po zakończeniu z nim, musi dysponować adaptera.Najwygodniejszym sposobem osiągnięcia tego jest z using instrukcji.Poniższy przykład ilustruje to.
// The file path of a model instance of the FamilyTree DSL:
string targetModelFile = "TudorFamilyTree.ftree";
// Get the ModelBus service:
IModelBus modelBus =
this.Store.GetService(typeof(SModelBus)) as IModelBus;
// Get an adapterManager for the target DSL:
FamilyTreeAdapterManager manager =
(modelbus.GetAdapterManager(FamilyTreeAdapter.AdapterId)
as FamilyTreeAdapterManager;
// or: (modelBus.FindAdapterManagers(targetModelFile).First())
// or could provide an EnvDTE.ProjectItem
// Create a reference to the target model:
// NOTE: the target model must be a file in this project.
ModelBusReference modelReference =
manager.CreateReference(targetModelFile);
// or can use an EnvDTE.ProjectItem instead of the filename
// Get the root element of this model:
using (FamilyTreeAdapter adapter =
modelBus.CreateAdapter(modelReference) as FamilyTreeAdapter)
{
FamilyTree modelRoot = adapter.ModelRoot;
// Access elements under the root in the usual way:
foreach (Person p in modelRoot.Persons) {...}
// You can create adapters for individual elements:
ModelBusReference elementReference =
adapter.GetElementReference(person);
...
} // Dispose adapter
Jeśli chcesz mieć możliwość korzystania z modelReference później go przechowywać w właściwość domeny, która ma typ zewnętrznych ModelBusReference:
using Transaction t = this.Store.TransactionManager
.BeginTransaction("keep reference"))
{
artist.FamilyTreeReference = modelReference;
t.Commit();
}
Aby zezwolić użytkownikom na edytowanie tej właściwości domeny, należy użyć ModelReferenceEditor jako parametr w atrybucie edytora.Aby uzyskać więcej informacji, zobacz Zezwalaj użytkownikowi edytowanie odwołanie.
Aby utworzyć odwołanie do elementu
Karta utworzonego dla modelu może służyć do tworzenia i rozwiązać odniesienia.
// person is an element in the FamilyTree model:
ModelBusReference personReference =
adapter.GetElementReference(person);
Jeśli chcesz mieć możliwość korzystania z elementReference później go przechowywać w właściwość domeny, która ma typ zewnętrznych ModelBusReference.Aby użytkownicy mogli go edytować, należy użyć ModelElementReferenceEditor jako parametr w atrybucie edytora.Aby uzyskać więcej informacji, zobacz Zezwalaj użytkownikowi edytowanie odwołanie.
Rozpoznawanie odwołania
Jeśli masz ModelBusReference (MBR) można uzyskać modelu lub elementu modelu, do którego się odnosi.Jeśli element jest przedstawiona na diagramie lub w innym widoku, można otworzyć widok i wybierz element.
Można utworzyć kartę z rekordem MBR.Od karty można uzyskać katalogu głównego modelu.Można również rozwiązać MBRs, które odwołują się do określonych elementów w ramach modelu.
using Microsoft.VisualStudio.Modeling.Integration; ...
ModelBusReference elementReference = ...;
// Get the ModelBus service:
IModelBus modelBus =
this.Store.GetService(typeof(SModelBus)) as IModelBus;
// Use a model reference or an element reference
// to obtain an adapter for the target model:
using (FamilyTreeAdapter adapter =
modelBus.CreateAdapter(elementReference) as FamilyTreeAdapter)
// or CreateAdapter(modelReference)
{
// Get the root of the model:
FamilyTree tree = adapter.ModelRoot;
// Get a model element:
MyDomainClass mel =
adapter.ResolveElementReference<MyDomainClass>(elementReference);
if (mel != null) {...}
// Get the diagram or other view, if there is one:
ModelBusView view = adapter.GetDefaultView();
if (view != null)
{
view.Open();
// Display the diagram:
view.Show();
// Attempt to select the shape that presents the element:
view.SetSelection(elementReference);
}
} // Dispose the adapter.
Aby rozwiązać odniesienia ModelBus w szablonie tekstu
DSL, do którego chcesz uzyskać dostęp do muszą mieć karty ModelBus, który został skonfigurowany dla dostępu przez Szablony tekstu.Aby uzyskać więcej informacji, zobacz To provide access to a DSL.
Zazwyczaj użytkownik będą uzyskiwać dostęp do elementu docelowego, DSL, przy użyciu odwołania magistrali modelu (MBR) są przechowywane w źródle DSL.Szablon zawiera zatem dyrektywy źródła DSL oraz kod rozwiązania MBR.Aby uzyskać więcej informacji na temat szablonów tekstu zobacz Generowanie kodu w języku specyficzne dla domeny.
<#@ template debug="true" hostspecific="true" inherits="Microsoft.VisualStudio.TextTemplating.Modeling.ModelBusEnabledTextTransformation" #> <#@ SourceDsl processor="SourceDslDirectiveProcessor" requires="fileName='Sample.source'" #> <#@ output extension=".txt" #> <#@ assembly name = "Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0" #> <#@ assembly name = "System.Core" #> <#@ assembly name = "Company.CompartmentDragDrop.Dsl.dll" #> <#@ assembly name = "Company.CompartmentDragDrop.ModelBusAdapter.dll" #> <#@ import namespace="Microsoft.VisualStudio.Modeling.Integration" #> <#@ import namespace="System.Linq" #> <#@ import namespace="Company.CompartmentDragDrop" #> <#@ import namespace="Company.CompartmentDragDrop.ModelBusAdapters" #> <# // Get source root from directive processor: ExampleModel source = this.ExampleModel; // This DSL has a MBR in its root: using (ModelBusAdapter adapter = this.ModelBus.CreateAdapter(source.ModelReference) as ModelBusAdapter) { ModelBusAdapterManager manager = this.ModelBus.FindAdapterManagers(this.Host.ResolvePath("Sample.compDD1")).FirstOrDefault(); ModelBusReference modelReference = manager.CreateReference(this.Host.ResolvePath("Sample.compDD1")); // Get the root element of this model: using (CompartmentDragDropAdapter adapter = this.ModelBus.CreateAdapter(modelReference) as CompartmentDragDropAdapter) { ModelRoot root = adapter.ModelRoot; #> [[<#= root.Name #>]] <# } #>
Aby uzyskać więcej informacji i instruktażu zobaczW szablonie tekstu przy użyciu programu Visual Studio ModelBus
Serializacja ModelBusReference
Jeśli chcesz przechowywać ModelBusReference (MBR) w postaci ciągu, można go serializować:
string serialized = modelBus.SerializeReference(elementReference);
// Store it anywhere, then get it back again:
ModelBusReference elementReferenceRestored =
modelBus.DeserializeReference(serialized, null);
MBR, który jest seryjny w ten sposób jest zależna od kontekstu.Jeśli używasz prostego opartych na plikach modelu karta magistrali rekord MBR zawiera ścieżkę bezwzględną pliku.Jest to wystarczające, jeśli nigdy nie przeniesie pliki modeli instancji.Jednak pliki model będzie zazwyczaj elementy w Visual Studio projektu.Oczekują, że użytkownicy będą mogli przenosić całego projektu w różnych częściach systemu plików.Ponadto będzie oczekiwać mogli zachować projekt pod kontrolą źródła i otworzyć go na różnych komputerach.Nazwy ścieżki powinny być zatem serializowane względem lokalizacji projektu, który zawiera pliki.
Serializacja w stosunku do określonego pliku ścieżki
A ModelBusReference zawiera ReferenceContext, który jest słownik, w którym można przechowywać informacje, takie jak ścieżka pliku, w stosunku, do którego powinny być serializowane.
Aby szeregować względem ścieżki:
elementReference.ReferenceContext.Add(
ModelBusReferencePropertySerializer.FilePathSaveContextKey,
currentProjectFilePath);
string serialized = modelBus.SerializeReference(elementReference);
Aby pobrać odwołania z ciągu znaków:
ReferenceContext context = new ReferenceContext();
context.Add(ModelBusReferencePropertySerializer.FilePathLoadContextKey,
currentProjectFilePath);
ModelBusReference elementReferenceRestored =
modelBus.DeserializeReference(serialized, context);
Utworzone przez innych kart ModelBusReferences
Następujące informacje są przydatne, jeśli chcesz utworzyć własne karty.
A ModelBusReference (MBR) składa się z dwóch części: nagłówka MBR, który jest rozszeregować przez model bus, i specyficzne dla adaptera, który jest obsługiwany przez Menedżera określonej karty.Pozwala to zapewnić swój własny format serializacji karty.Na przykład można się odwoływać bazy danych zamiast pliku lub może przechowywać dodatkowe informacje w odwołaniu do karty.Własne karty można umieścić dodatkowe informacje w ReferenceContext.
Podczas deserializacji jest rekordem MBR, należy podać ReferenceContext, który jest następnie przechowywany w obiekcie MBR.Serializować jest rekordem MBR, ReferenceContext przechowywanych jest używany przez kartę się podłoże w ciągu.Rozszeregowanym ciąg nie zawiera wszystkie informacje w ReferenceContext.Na przykład prostego pliku based adapter, ReferenceContext zawiera ścieżki pliku głównego, nie znajduje się w ciągu szeregowany MBR.
Główny rekord rozruchowy jest rozszeregować w dwóch etapach:
ModelBusReferencePropertySerializerjest serializatora standard, który zajmuje się nagłówek MBR.Używa standardowego DSL SerializationContext zbioru właściwości, które jest przechowywane w ReferenceContext za pomocą klucza ModelBusReferencePropertySerializer.ModelBusLoadContextKey.W szczególności SerializationContext powinien zawierać wystąpienia ModelBus.
Karta ModelBus zajmuje część specyficzne dla adaptera MBR.Dodatkowe informacje przechowywane w ReferenceContext z MBR może używać.Proste karty na podstawie pliku przechowuje ścieżki plików do katalogu głównego za pomocą klawiszy FilePathLoadContextKey i FilePathSaveContextKey.
Odwołanie karty w pliku modelu jest rozszeregować tylko wtedy, gdy jest on używany.
Aby utworzyć Model
Tworzenie, otwieranie i edytowanie modelu
Poniższy fragment jest pobranych z próbki Automat na stronie internetowej VMSDK.Stanowi ono ilustrację wykorzystanie ModelBusReferences, aby utworzyć i otworzyć model i uzyskać diagramu skojarzonych z tym modelem.
W tym przykładzie nazwa docelowego DSL jest StateMachine.Kilka nazw są uzyskiwane z niego, takie jak nazwa klasy modelu i nazwę ModelBusAdapter.
using Fabrikam.StateMachine.ModelBusAdapters;
using Microsoft.VisualStudio.Modeling;
using Microsoft.VisualStudio.Modeling.Diagrams;
using Microsoft.VisualStudio.Modeling.Integration;
using Microsoft.VisualStudio.Modeling.Integration.Shell;
using Microsoft.VisualStudio.Modeling.Shell;
...
// Create a new model.
ModelBusReference modelReference =
StateMachineAdapterManager .CreateStateMachineModel(modelName, fileName);
//Keep reference of new model in this model.
using (Transaction t = ...)
{
myModelElement.ReferenceProperty = modelReference;
t.Commit();
}
// Get the ModelBus service from Visual Studio.
IModelBus modelBus = Microsoft.VisualStudio.Shell.Package.
GetGlobalService(typeof(SModelBus)) as IModelBus;
// Get a modelbus adapter on the new model.
ModelBusAdapter modelBusAdapter;
modelBus.TryCreateAdapter(modelReference,
this.ServiceProvider, out modelBusAdapter);
using (StateMachineAdapter adapter =
modelBusAdapter as StateMachineAdapter)
{
if (adapter != null)
{
// Obtain a Diagram from the adapter.
Diagram targetDiagram =
((StandardVsModelingDiagramView)
adapter.GetDefaultView()
).Diagram;
using (Transaction t =
targetDiagram.Store.TransactionManager
.BeginTransaction("Update diagram"))
{
DoUpdates(targetDiagram);
t.Commit();
}
// Display the new diagram.
adapter.GetDefaultView().Show();
}
}
Sprawdzanie poprawności odwołań
BrokenReferenceDetector badania wszystkie właściwości domeny w magazynie, które może pomieścić ModelBusReferences.Wywołuje akcję Pana, że zapewniają, w przypadku stwierdzenia wszelkich działań.Jest to szczególnie przydatne dla metod sprawdzania poprawności.Następujące metody sprawdzania poprawności testów magazynu na próbę zapisać model i raporty uszkodzone odniesienia w oknie błędów:
[ValidationMethod(ValidationCategories.Save)]
public void ValidateModelBusReferences(ValidationContext context)
{
BrokenReferenceDetector.DetectBrokenReferences(this.Store,
delegate(ModelElement element, // parent of property
DomainPropertyInfo property, // identifies property
ModelBusReference reference) // invalid reference
{
context.LogError(string.Format(INVALID_REF_FORMAT,
property.Name,
referenceState.Name,
new ModelBusReferenceTypeConverter().
ConvertToInvariantString(reference)),
"Reference",
element);
});
}}
private const string INVALID_REF_FORMAT =
"The '{0}' domain property of ths ReferenceState instance "
+ "named '{1}' contains reference value '{2}' which is invalid";
Akcje wykonywane przez rozszerzenie ModelBus
Następujące informacje nie jest istotne, ale może być przydatna, jeśli dokonuje się szerokim zakresie korzysta z ModelBus.
Rozszerzenie ModelBus wprowadza się następujące zmiany w rozwiązaniu DSL.
Kliknij prawym przyciskiem myszy diagram definicji DSL, Włączyć Modelbus, a następnie wybierz włączyć ten DSL zużyje ModelBus:
W projekcie DSL odwołanie jest dodawany doMicrosoft.VisualStudio.Modeling.Sdk.Integration.11.0.dll
W definicji DSL, dodaje się odwołanie do typu zewnętrznego: Microsoft.VisualStudio.Modeling.Integration.ModelBusReference.
Można zobaczyć odniesienia w DSL Explorer, pod Domeny typów.Aby ręcznie dodać odwołania do typu zewnętrznego, kliknij prawym przyciskiem myszy węzeł główny.
Dodaje się nowy plik szablonu, Dsl\GeneratedCode\ModelBusReferencesSerialization.tt.
Kiedy można ustawić typ właściwości domeny do ModelBusReference, a następnie kliknij prawym przyciskiem myszy właściwość i kliknij szczególne właściwości włączyć ModelBusReference:
Kilka atrybutów CLR są dodawane do właściwości domeny.Można je zobacz pole niestandardowe atrybuty w oknie dialogowym właściwości.W Dsl\GeneratedCode\DomainClasses.cs, można wyświetlić atrybuty na deklaracji właściwości:
[System.ComponentModel.TypeConverter(typeof( Microsoft.VisualStudio.Modeling.Integration.ModelBusReferenceTypeConverter))] [System.ComponentModel.Editor(typeof( Microsoft.VisualStudio.Modeling.Integration.Picker .ModelReferenceEditor // or ModelElementReferenceEditor ), typeof(System.Drawing.Design.UITypeEditor))] [Microsoft.VisualStudio.Modeling.Integration.Picker .SupplyFileBasedBrowserConfiguration ("Choose a model file", "Target model|*.target")]
Po kliknięciu prawym przyciskiem myszy Diagram definicji DSL, kliknij Włączyć ModelBusi wybierz polecenie narazić DSL, to do ModelBus:
Nowy projekt ModelBusAdapter jest dodawana do roztworu.
Odniesienie do ModelBusAdapter dodaje się do DslPackage projektu.ModelBusAdapterodwołuje się do Dsl projektu.
W DslPackage\source.extention.tt, |ModelBusAdapter| dodaje się jako składnik MEF.
Zobacz też
Koncepcje
Jak: Otwórz Model z pliku kodu programu
Jak: integrowanie modeli UML z innych modeli i narzędzia
Jak: Dodawanie obsługi przeciągania i upuszczania
W szablonie tekstu przy użyciu programu Visual Studio ModelBus