Integrowanie modeli za pomocą Visual Studio Modelbus
Visual StudioModelBus udostępnia metody do tworzenia łączy między modelami i z innymi narzędziami do modeli.Na przykład można połączyć języka specyficznego dla domeny (DSL) modeli i modele UML.Możesz utworzyć zintegrowanemu zestawowi DSLs.
ModelBus pozwala utworzyć unikatowy odwołania do modelu lub konkretnego elementu w modelu.To odwołanie mogą być przechowywane poza modelu, na przykład w elemencie w innym modelu.Po przy okazji później, narzędzie chce uzyskać dostęp do elementu, infrastruktury magistrali modelu będą odpowiedni model obciążenia i będą zwracać elementu.Jeśli chcesz, możesz wyświetlać modelu dla użytkownika.Jeśli plik nie jest dostępny w poprzedniej lokalizacji, ModelBus poprosi użytkownika można go odnaleźć.Jeśli użytkownik znajduje się plik, ModelBus naprawia wszystkie odwołania do tego pliku.
[!UWAGA]
W bieżącym Visual Studio wykonania ModelBus, połączone modele musi być elementów w tej samej Visual Studio rozwiązania.
Aby uzyskać dodatkowe informacje i przykładowy kod zobacz:
Program Visual Studio wizualizacji i modelowania SDK (VMSDK) witryny sieci Web
Uzyskanie dostępu do DSL
Aby można było utworzyć ModelBus odwołania do modelu lub jego elementy, należy zdefiniować ModelBusAdapter dla DSL.Najprostszy sposób postępowania jest używanie Visual Studio rozszerzenie magistrali modelu, która dodaje polecenia do Projektant DSL.
Do udostępnienia definicji DSL modelu magistrali
Pobierz i zainstaluj rozszerzenie Visual Studio Model Bus, chyba że użytkownik ma już zainstalowany.Aby uzyskać więcej informacji, zobacz wizualizacji i modelowania SDK.
Otwórz plik definicji DSL.Kliknij prawym przyciskiem myszy powierzchnię projektową, a następnie kliknij przycisk Włącz Modelbus.
W oknie dialogowym wybierz chcę udostępnić tego DSL do ModelBus.Jeśli chcesz, aby ten DSL zarówno do udostępnienia modelom i użycie odwołania do innych DSLs, można wybrać obu opcji.
Kliknij przycisk OK.Nowy projekt "ModelBusAdapter" zostanie dodany do rozwiązania DSL.
Jeśli chcesz uzyskać dostęp do DSL z szablonu tekstu, należy zmodyfikować AdapterManager.tt w nowy projekt.Pomiń ten krok, aby uzyskać dostęp do DSL z innych kodu, takich jak polecenia i programy obsługi zdarzeń.Aby uzyskać więcej informacji, zobacz Użycie programu Visual Studio ModelBus w szablonie tekstu.
Zmień klasę podstawową AdapterManagerBase do VsTextTemplatingModelingAdapterManager.
Na końcu pliku, w pobliżu Wstaw ten atrybut dodatkowe przed klasy AdapterManager:
[Microsoft.VisualStudio.Modeling.Integration.HostSpecific(HostName)]
W projekcie odwołuje się do ModelBusAdapter Dodaj Microsoft.VisualStudio.TextTemplating.Modeling.11.0.
Jeśli chcesz uzyskać dostęp DSL zarówno z szablonów tekstu oraz innego kodu, należy dwie karty: jeden zmodyfikowany, a drugi bez modyfikacji.
Kliknij przycisk Transform wszystkie szablony.
Ponowne kompilowanie rozwiązania.
Możliwe jest obecnie dla ModelBus otworzyć wystąpień tej DSL.
Folder ModelBusAdapters\bin\* zawiera zestawy utworzone przez Dsl projektu i ModelBusAdapters projektu.Można odwoływać się do tego DSL z innego DSL, należy zaimportować te zestawy.
Upewnij się, że elementy można odwoływać się
Visual StudioKarty ModelBus umożliwia identyfikacyjnych, domyślnie identyfikator guid elementu.Identyfikatory te dlatego musi zostać utrwalony w pliku modelu.
Aby upewnić się, że element pozostają identyfikatory
Otwórz DslDefinition.dsl.
W Eksploratorze DSL rozwiń zachowanie serializacji Xml, następnie dane klasy.
Dla każdej klasy, do którego ma zostać utworzony Model Bus odwołuje się do:
Kliknij węzeł klasy i upewnij się, że w oknie dialogowym właściwości serializacji identyfikator jest ustawiona na true.
Jeśli chcesz użyć nazwy elementu, aby zidentyfikować elementy zamiast identyfikatory GUID, można zastąpić części wygenerowanego kart.Zastąp następujących metod w klasie karty:
Zastąp GetElementId do zwrócenia identyfikator ma być używany.Ta metoda jest wywoływana podczas tworzenia odwołania.
Zastąp ResolveElementReference do zlokalizowania prawidłowego elementu z odwołaniem magistrali modelu.
Dostęp do DSL z innego DSL
Możesz zapisać odwołania magistrali modelu we właściwości domeny w DSL i pisania kodu niestandardowego, który używa tych.Można również Umożliwianie użytkownikowi utworzenia odwołanie magistrali modelu przez pobierania pliku modelu i element w nim.
Aby włączyć DSL można używać odwołań do innego DSL, najpierw należy go konsumenta odwołań do magistrali modelu.
Aby włączyć DSL użycie odwołuje się do udostępnionego DSL
W definicji DSL diagramu, kliknij prawym przyciskiem myszy główna część diagramu, a następnie kliknij przycisk Włącz Modelbus.
W oknie dialogowym wybierz I chcesz włączyć tego modelu użycie odwołania magistrali modelu.
W projekcie Dsl wykorzystujących DSL należy dodać następujące zestawy z odwołaniami do projektów.Te zestawy (pliki z rozszerzeniem dll) znajduje się w katalogu ModelBusAdapter\bin\ * narażonych DSL.
Udostępnionego zestawu DSL, np.Fabrikam.FamilyTree.Dsl.dll
Zestaw karty magistrali narażonych modelu, na przykładFabrikam.FamilyTree.ModelBusAdapter.dll
Dodaj następujące zestawy .NET do odwołaniami do projektów wykorzystujących projektu DSL.
Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0.dll
Microsoft.VisualStudio.Modeling.Sdk.Integration.Shell.11.0.dll
Do przechowywania odwołanie magistrali modelu we właściwości domeny
W definicji DSL wykorzystujących DSL Dodaj właściwość domeny do klasy domeny i ustaw jego nazwy.
We właściwościach okna, z właściwością domeny zaznaczone, ustaw typu do ModelBusReference.
Na tym etapie kod programu można ustawić wartości właściwości, ale jest tylko do odczytu w oknie dialogowym właściwości.
Umożliwia użytkownikom można skonfigurować właściwości w edytorze odwołania ModelBus specjalne.Istnieją dwie wersje tego edytora lub selektora: co umożliwia użytkownikom wybierz plik modelu, a w innym zezwala użytkownikom wybór pliku modelu i element w modelu.
Aby umożliwić użytkownikowi ustawienie odwołanie magistrali modelu we właściwości domeny
Kliknij prawym przyciskiem myszy właściwość domeny, a następnie kliknij przycisk ModelBusReference edytować właściwości specyficzne.Otwiera okno dialogowe.Jest to selektora magistrali modelu.
Wybierz odpowiedni rodzaj ModelBusReference: do modelu lub element wewnątrz modelu.
W ciągu filtru okna dialogowego pliku, wprowadź ciąg takich jak Family Tree files |*.ftree.Rozszerzenie pliku z udostępnionym DSL Subsitute.
Jeśli została wybrana w celu odwołania się do elementu w modelu, możesz dodać listę 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 rozwiązań.
Przestroga
Jeśli nie wybrano prawidłowego modelu lub podmiot, przycisk OK zostanie nie skutkują, mimo że może spowodować wyświetlenie włączone.
Jeśli określono listę typów docelowego, takich jak Company.FamilyTree.Person, trzeba dodać odwołanie do zestawu z projektem DSL odwołujące się do pliku DLL celu DSL, na przykład Company.FamilyTree.Dsl.dll
Aby przetestować odwołanie magistrali modelu
Tworzenie udostępnionego i wykorzystujących DSLs.
Uruchom jeden z DSLs w trybie doświadczalnych naciskając klawisz F5 lub CTRL + F5.
W projekcie debugowanie w wystąpieniu doświadczalnych Visual Studio, Dodaj pliki, które są wystąpienia każdej DSL.
[!UWAGA]
Visual StudioModelBus może prowadzić tylko odwołania do modeli, które są elementy w tej samej Visual Studio rozwiązania.Na przykład nie można utworzyć odwołanie do pliku modelu w ramach innego systemu plików.
Utwórz kilka elementów i łącza w wystąpieniu narażonych DSL, a następnie go zapisać.
Otwórz wystąpienie wykorzystujących DSL i wybierz element modelu, który ma właściwość modelu magistrali odwołania.
W oknie właściwości kliknij dwukrotnie właściwość odwołania magistrali modelu.Otwiera okno dialogowe wybór.
Kliknij przycisk Przeglądaj i wybierz wystąpienie narażonych DSL.
Selektor również umożliwi wybranie elementu w modelu, jeśli określony element specyficzny rodzaj odwołania magistrali modelu.
Tworzenie odwołań w kodzie programu
Jeśli chcesz przechowywać odwołanie do modelu lub element w modelu, Utwórz ModelBusReference.Istnieją dwa rodzaje z ModelBusReference: model odwołania i odwołuje się do elementu.
Aby utworzyć odwołania do modelu, należy AdapterManager z DSL, którego modelu jest wystąpieniem i nazwę pliku lub Visual Studio elementu projektu modelu.
Aby utworzyć odwołanie do elementu, czego potrzebujesz do pliku modelu, a element, który ma zostać odwoływać się do adapter.
[!UWAGA]
Z Visual Studio ModelBus, można utworzyć odwołania tylko do elementów w tej samej Visual Studio rozwiązania.
Importuj narażonych zestawy DSL
W projekcie wykorzystujących dodać odwołań do zestawów DSL i ModelBusAdapter z udostępnionym DSL projektu.
Przypuśćmy na przykład, że chcesz przechowywać ModelBus odwołań w elementach DSL MusicLibrary.Odwołuje się do ModelBus będzie odwołań do elementów FamilyTree DSL.W Dsl projektu rozwiązania MusicLibrary, w węźle odwołuje się do dodania odwołania do następujące zestawy:
Fabrikam.FamilyTree.Dsl.dll - narażonych DSL.
Fabrikam.FamilyTree.ModelBusAdapters.dll - karty ModelBus z udostępnionym DSL.
Microsoft.VisualStudio.Modeling.Sdk.Integration.11.0
Microsoft.VisualStudio.Modeling.Sdk.Integration.Shell.11.0
Te zestawy znajduje się w ModelBusAdapters projektu z udostępnionym DSL, w obszarze bin\*.
W pliku kodu, gdzie utworzy odwołania będzie zwykle należy zaimportować 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 udostępnionego DSL i umożliwia utworzenie odwołania do modelu.Można określić albo ścieżkę do pliku, lub EnvDTE.ProjectItem.
Z AdapterManager można uzyskać karty, który zapewnia dostęp do poszczególnych elementów w modelu.
[!UWAGA]
Adapter musi dysponować po zakończeniu z nim.Sposób najbardziej do osiągnięcia tego jest z using instrukcji.Ilustruje to poniższy przykład.
// 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 można było używać modelReference później, możesz zapisać go w właściwość domeny, która ma typ zewnętrznego 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żytkownikom na edytowanie odwołanie.
Aby utworzyć odwołanie do elementu
Karty, utworzony przez Ciebie dla modelu może służyć do tworzenia i odwołań do rozpoznania.
// person is an element in the FamilyTree model:
ModelBusReference personReference =
adapter.GetElementReference(person);
Jeśli chcesz można było używać elementReference później, możesz zapisać go w właściwość domeny, która ma typ zewnętrznego ModelBusReference.Aby umożliwić użytkownikom go edytować, należy użyć ModelElementReferenceEditor jako parametr w atrybucie edytora.Aby uzyskać więcej informacji, zobacz Zezwalaj użytkownikom na edytowanie odwołanie.
Odwołuje się do rozpoznawania
Jeśli masz ModelBusReference (MBR) można uzyskać modelu lub element modelu, do którego odwołuje się.Jeśli element znajduje się na diagramie lub w innym widoku, możesz otworzyć widoku i zaznacz element.
Możesz utworzyć adapter z MBR.Z karty można uzyskać głównego modelu.Można także rozwiązać MBRs, które odwołują się do określonych elementów w 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 usunąć odwołania ModelBus w szablonie tekstu
DSL, które mają dostęp do musi mieć karty ModelBus, który został skonfigurowany dla dostępu przez Szablony tekstu.Aby uzyskać więcej informacji, zobacz do zapewnienia dostępu do DSL.
Zwykle należy będą uzyskiwać dostęp do obiektu docelowego DSL przy użyciu odwołania magistrali modelu (MBR) przechowywane w źródle DSL.Szablon zawiera z tego powodu dyrektywy źródła DSL oraz kodu do rozpoznania MBR.Aby uzyskać więcej informacji dotyczących szablonów tekstu, zobacz Generowanie kodu z języka specyficznego 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 #>]] <# } #>
Więcej informacji oraz przewodnik można znaleźćUżycie programu Visual Studio ModelBus w szablonie tekstu
Serializacji ModelBusReference
Jeśli chcesz przechowywać ModelBusReference (MBR) w postaci ciągu, może on serializacji:
string serialized = modelBus.SerializeReference(elementReference);
// Store it anywhere, then get it back again:
ModelBusReference elementReferenceRestored =
modelBus.DeserializeReference(serialized, null);
MBR, które jest serializowana w ten sposób jest zależna od kontekstu.Jeśli używasz prostego karty magistrali oparte na plikach modelu, główny rekord rozruchowy zawiera bezwzględną ścieżkę pliku.Jest to wystarczające, jeśli nigdy nie zostanie przesunięty w plikach wystąpienia modelu.Pliki modelu zwykle będzie jednak elementów w Visual Studio projektu.Użytkownicy spowoduje, że można przenieść całego projektu różnym częściom systemu plików.Będą one również oczekiwać pojawienia się może zachować projekt pod kontrolą źródła i otwórz go na różnych komputerach.Ścieżka nazw dlatego powinien zostać Zserializowany lokalizację projekt zawierający pliki.
Serializacji względem określonej ścieżki
Element ModelBusReference zawiera ReferenceContext, co jest słownik, w którym można przechowywać informacje, takie jak ścieżka pliku, względem którego powinien podlegać serializacji.
Do serializacji względem ścieżki:
elementReference.ReferenceContext.Add(
ModelBusReferencePropertySerializer.FilePathSaveContextKey,
currentProjectFilePath);
string serialized = modelBus.SerializeReference(elementReference);
Aby pobrać odwołania z ciągu:
ReferenceContext context = new ReferenceContext();
context.Add(ModelBusReferencePropertySerializer.FilePathLoadContextKey,
currentProjectFilePath);
ModelBusReference elementReferenceRestored =
modelBus.DeserializeReference(serialized, context);
Utworzone przez inne karty ModelBusReferences
Następujące informacje są przydatne, jeśli chcesz utworzyć własny karty.
Element ModelBusReference (MBR) składa się z dwóch części: nagłówka MBR, który jest przeprowadzona przez magistralę modelu, karty specyficzne i który jest obsługiwany przez Menedżera określonej karty.Dzięki temu możesz dostarczyć własny format serializacji karty.Na przykład można odwołać bazy danych, a nie w pliku lub w adresie karty może przechowywać dodatkowe informacje.Własne karty można umieścić dodatkowe informacje w ReferenceContext.
Podczas deserializacji MBR, należy podać ReferenceContext, następnie przechowywanego w obiekcie MBR.Podczas serializacji MBR, przechowywanej ReferenceContext ułatwiają przez kartę wygenerować ciągu.Zdeserializowana ciąg nie zawiera wszystkie informacje w ReferenceContext.Na przykład w prosty karty oparte na plikach ReferenceContext zawiera ścieżki pliku głównego, która nie jest przechowywany w parametrach MBR serializacji.
Główny rekord rozruchowy jest przeprowadzona w dwóch etapach:
ModelBusReferencePropertySerializerto standardowy serializator dotyczącą nagłówka MBR.Używa standardowych DSL SerializationContext zbioru właściwości, które są przechowywane w ReferenceContext przy użyciu klucza ModelBusReferencePropertySerializer.ModelBusLoadContextKey.W szczególności SerializationContext powinien zawierać wystąpienia ModelBus.
Karta ModelBus dotyczy określonej karty część MBR.Dodatkowe informacje przechowywane w ReferenceContext z MBR, może używać.Prosty karty oparte na plikach przechowuje ścieżki plików głównego za pomocą kluczy FilePathLoadContextKey i FilePathSaveContextKey.
Odwołanie do karty w pliku modelu jest przeprowadzona tylko wtedy, gdy jest używany.
Aby utworzyć Model
Tworzenie, otwieranie i edytowania modelu
Poniższy fragment jest pobierana z przykładu maszyny stanu w witrynie sieci Web VMSDK.Jego ilustruje użycie ModelBusReferences do tworzenia i otwierania modelu oraz w celu uzyskania diagramu skojarzone z modelu.
W tym przykładzie nazwa docelowego DSL jest StateMachine.Kilka nazw pochodzących z niego, takie jak nazwa klasy modelu i nazwy 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();
}
}
Trwa sprawdzanie poprawności odwołań
BrokenReferenceDetector testów wszystkie właściwości domeny w magazynie, która może zawierać ModelBusReferences.Wywołuje akcję możesz wskazówki, gdzie znajduje się żadnych działań.Jest to szczególnie użyteczne w przypadku metody weryfikacji.Następujące metody weryfikacji testy magazynu na próba zapisania modelu i raporty uszkodzone odniesienia w oknie błędy:
[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 konieczne, ale może być przydatne, jeśli użytkownik szeroką wykorzystać ModelBus.
Rozszerzenie ModelBus powoduje, że następujące zmiany w rozwiązaniu DSL.
Po kliknięciu prawym przyciskiem myszy diagram definicji DSL, kliknij przycisk Włącz Modelbus, a następnie wybierz Włącz ten DSL użycie ModelBus:
W projekcie DSL odwołanie jest dodawany doMicrosoft.VisualStudio.Modeling.Sdk.Integration.11.0.dll
W definicji DSL dodawanej odwołanie do typu zewnętrznej: Microsoft.VisualStudio.Modeling.Integration.ModelBusReference.
Możesz zobaczyć odwołania w DSL Explorer, w obszarze typy domeny.Aby ręcznie dodać odwołuje się do typu zewnętrznej, kliknij prawym przyciskiem myszy węzeł główny.
Zostanie dodany nowy plik szablonu, Dsl\GeneratedCode\ModelBusReferencesSerialization.tt.
Ustaw typ właściwości domeny ModelBusReference, a następnie kliknij prawym przyciskiem myszy właściwość po kliknięciu przycisku określone właściwości Włącz ModelBusReference:
Kilka atrybutów CLR są dodawane do właściwości domeny.Możesz zobaczyć je w polu atrybutów niestandardowych w oknie dialogowym właściwości.W Dsl\GeneratedCode\DomainClasses.cs, możesz zobaczyć atrybuty w 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 diagramu definicji DSL, kliknij przycisk Włącz ModelBusi wybierz uwidacznia tego DSL do ModelBus:
Nowy projekt ModelBusAdapter zostanie dodany do rozwiązania.
Odwołanie do ModelBusAdapter zostanie dodany do DslPackage projektu.ModelBusAdapterodwołuje się do Dsl projektu.
W DslPackage\source.extention.tt, |ModelBusAdapter| zostanie dodany jako składnik MEF.
Zobacz też
Koncepcje
Porady: otwieranie modelu z pliku w kodzie programu
Porady: integrowanie modeli UML z innymi modelami i narzędziami