Sdílet prostřednictvím


Integrace modelů pomocí sady Visual Studio ModelBus

Visual Studio ModelBus poskytuje metodu pro vytváření propojení mezi modely a z jiných nástrojů do modelů. Můžete například propojit modely jazyka DSL (Domain-Specific Language) a modely UML. Můžete vytvořit integrovanou sadu seznamů DSLS.

Upozorňující

Rozšíření Visual Studio ModelBus popsané v tomto článku už není k dispozici ke stažení. Tyto pokyny ale stále fungují pro uživatele, kteří už mají toto rozšíření nainstalované.

ModelBus umožňuje vytvořit jedinečný odkaz na model nebo na konkrétní prvek uvnitř modelu. Tento odkaz lze uložit mimo model, například v elementu v jiném modelu. Když později nástroj chce získat přístup k prvku, infrastruktura ModelBus načte příslušný model a vrátí prvek. Pokud chcete, můžete model uživateli zobrazit. Pokud soubor není přístupný v předchozím umístění, ModelBus požádá uživatele, aby ho našel. Pokud uživatel soubor najde, modelBus aktualizuje všechny odkazy na tento soubor.

Poznámka:

V aktuální implementaci modelu ModelBus sady Visual Studio musí být propojené modely položkami ve stejném řešení sady Visual Studio.

Další informace o rozšíření ModelBus najdete v následujících zdrojích informací:

Poznámka:

Komponenta Transformace textové šablony se automaticky nainstaluje jako součást sady funkcí vývoje rozšíření sady Visual Studio. Můžete ho také nainstalovat z karty Jednotlivé komponenty Instalační program pro Visual Studio v kategorii sad SDK, knihoven a architektur. Nainstalujte komponentu Modeling SDK z karty Jednotlivé komponenty .

Poskytnutí přístupu k DSL

Než budete moci vytvořit odkazy ModelBus na model nebo jeho prvky, definujte ModelBusAdapter pro DSL. Nejjednodušší způsob, jak ho definovat, je použít rozšíření Visual Studio ModelBus, které přidává příkazy do Návrháře DSL.

Zveřejnění definice DSL pro ModelBus

  1. Otevřete definiční soubor DSL. Klikněte pravým tlačítkem myši na návrhovou plochu a pak vyberte Povolit ModelBus.

  2. V dialogovém okně zvolte , že chci zveřejnit tuto DSL modelbusu. Obě možnosti můžete zvolit, pokud chcete, aby tento DSL zpřístupnil své modely a aby spotřebovávat odkazy na jiné seznamy DSLS.

  3. Vyberte OK. Do řešení DSL se přidá nový projekt ModelBusAdapter .

  4. Pokud chcete získat přístup k DSL z textové šablony, musíte upravit AdapterManager.tt v novém projektu. Tento krok vynecháte, pokud chcete získat přístup k DSL z jiného kódu, jako jsou příkazy a obslužné rutiny událostí. Další informace naleznete v tématu Použití sady Visual Studio ModelBus v textové šabloně.

    1. Změňte základní třídu AdapterManagerBase na VsTextTemplatingModelingAdapterManager.

    2. Na konec souboru vložte tento atribut před třídu AdapterManager:

      [Microsoft.VisualStudio.Modeling.Integration.HostSpecific(HostName)]

    3. V nuGet Správce balíčků ModelBusAdapter projektu přidejte NuGet PackageReference do Microsoft.VisualStudio.TextTemplating.Modeling.

      Pokud chcete získat přístup k DSL z textových šablon i z jiného kódu, potřebujete dva adaptéry, jeden upravený a jeden nezměněný.

  5. Vyberte Transformovat všechny šablony.

  6. Znovu sestavte řešení.

    ModelBus teď může otevírat instance tohoto DSL.

    Složka ModelBusAdapers\bin* obsahuje sestavení sestavená projektem Dsl a projektem ModelBusAdapters . Chcete-li odkazovat na tento DSL z jiného DSL, importujte tato sestavení.

Ujistěte se, že na prvky lze odkazovat.

Adaptéry Visual Studio ModelBus ve výchozím nastavení používají identifikátor GUID elementu k jeho identifikaci. Tyto identifikátory musí být trvalé v souboru modelu.

Pokud chcete zajistit zachování ID elementů:

  1. Otevřete DslDefinition.dsl.

  2. V DSL Explorer rozbalte xml serializace Chování a potom třídy Data.

  3. Pro každou třídu, na kterou chcete vytvořit odkazy ModelBus:

    Vyberte uzel třídy a v okně Vlastnosti se ujistěte, že serializace ID je nastavena na true.

Pokud chcete k identifikaci prvků místo identifikátorů GUID použít názvy prvků, můžete také přepsat části vygenerovaných adaptérů. Přepište následující metody ve třídě adaptéru:

  • Přepsání GetElementId vrátí identifikátor, který chcete použít. Tato metoda se volá při vytváření odkazů.
  • Přepsání ResolveElementReference pro vyhledání správného prvku z odkazu ModelBus.

Přístup k DSL z jiného DSL

Odkazy ModelBus můžete uložit do vlastnosti domény v DSL a psát vlastní kód, který je používá. Uživatele můžete také nechat vytvořit odkaz ModelBus výběrem souboru modelu a elementu v něm.

Pokud chcete, aby DSL používal odkazy na jinou DSL, měli byste ho nejprve nastavit jako příjemce odkazů na sběrnici modelu.

Povolení využívání odkazů na vystavenou dsl

  1. V diagramu definice DSL klikněte pravým tlačítkem myši na hlavní část diagramu a pak vyberte Povolit ModelBus.

  2. V dialogovém okně vyberte , že chcete povolit, aby tento model spotřebovávat odkazy na sběrnici modelu.

  3. Dsl V projektu využívání DSL přidejte do odkazů na projekt následující sestavení. Tato sestavení (.dll soubory) jsou v adresáři ModelBusAdapter\bin\* vystaveného DSL.

    • Vystavené sestavení DSL, například Fabrikam.FamilyTree.Dsl.dll

    • Vystavené sestavení adaptéru sběrnice modelu, například Fabrikam.FamilyTree.ModelBusAdapter.dll

  4. Přidejte následující sestavení .NET do odkazů na projekt využívající projekt DSL.

    • Microsoft.VisualStudio.Modeling.Sdk.Integration.dll
    • Microsoft.VisualStudio.Modeling.Sdk.Integration.Shell.dll

Uložení ModelBusReference ve vlastnosti domény

  1. V definici DSL spotřebovávatel DSL přidejte vlastnost domény do třídy domény a nastavte její název.

  2. V okně Vlastnosti s vybranou vlastností domény nastavte typ na ModelBusReference.

    V této fázi může kód programu nastavit hodnotu vlastnosti. Hodnota je v okně Vlastnosti jen pro čtení.

    Uživatelům můžete povolit nastavení vlastnosti pomocí specializovaného editoru ModelBusReference. Existují dvě verze tohoto editoru nebo nástroje pro výběr. Jeden umožňuje uživatelům zvolit soubor modelu a druhý umožňuje uživatelům zvolit soubor modelu a prvek v modelu.

Povolení, aby uživatel nastavil ModelBusReference ve vlastnosti domény

  1. Klikněte pravým tlačítkem myši na vlastnost domény a pak vyberte Upravit vlastnosti specifické pro ModelBusReference. Otevře se dialogové okno Pro výběr sběrnice modelu.

  2. Nastavte odpovídající typ ModelBusReference na model nebo na prvek uvnitř modelu.

  3. V řetězci filtru dialogového okna souboru zadejte řetězec, například Family Tree files |*.ftree. Nahraďte příponu vašeho vystaveného DSL.

  4. Pokud jste se rozhodli odkazovat na prvek v modelu, můžete přidat seznam typů, které uživatel může vybrat, například Company.FamilyTree.Person.

  5. Vyberte OK a potom na panelu nástrojů Průzkumník řešení vyberte Transformovat všechny šablony.

    Upozorňující

    Pokud jste nevybrali platný model nebo entitu, tlačítko OK nemá žádný vliv, i když se může zobrazit jako povolené.

  6. Pokud jste zadali seznam cílových typů, například Company.FamilyTree.Person, musíte přidat odkaz na sestavení odkaz na projekt DSL odkazující na knihovnu DLL cílové DSL, například Company.FamilyTree.Dsl.dll.

Otestování ModelBusReference

  1. Sestavte vystavené i spotřebované seznamy DSLS.

  2. Spusťte jeden z seznamů DSLS v experimentálním režimu stisknutím klávesy F5 nebo CTRL+F5.

  3. V projektu ladění v experimentální instanci sady Visual Studio přidejte soubory, které jsou instancemi jednotlivých DSL.

    Poznámka:

    Visual Studio ModelBus dokáže přeložit pouze odkazy na modely, které jsou položkami ve stejném řešení sady Visual Studio. Nemůžete například vytvořit odkaz na soubor modelu v jiné části systému souborů.

  4. Vytvořte některé prvky a odkazy v instanci vystaveného DSL a uložte ho.

  5. Otevřete instanci využívající DSL a vyberte prvek modelu, který má vlastnost odkazu sběrnice modelu.

  6. V okně Vlastnosti poklikejte na referenční vlastnost sběrnice modelu. Otevře se dialogové okno pro výběr.

  7. Vyberte Procházet a vyberte instanci vystavené DSL.

    Pokud jste zadali odkaz na sběrnici modelu specifický pro element, nástroj pro výběr také umožňuje zvolit položku v modelu.

Vytváření odkazů v kódu programu

Pokud chcete uložit odkaz na model nebo prvek uvnitř modelu, vytvořte ModelBusReference. Existují dva druhy ModelBusReference: odkazy na model a odkazy na elementy.

Chcete-li vytvořit odkaz na model, potřebujete AdapterManager dsl, jehož model je instance, a název souboru nebo položku projektu sady Visual Studio modelu.

K vytvoření odkazu na element potřebujete adaptér pro soubor modelu a prvek, na který chcete odkazovat.

Poznámka:

Pomocí sady Visual Studio ModelBus můžete vytvářet odkazy pouze na položky ve stejném řešení sady Visual Studio.

Import vystavených sestavení DSL

V projektu využívajícího přidejte odkazy na projekt na DSL a ModelBusAdapter sestavení vystaveného DSL.

Předpokládejme například, že chcete uložit odkazy ModelBus do prvků MusicLibrary DSL. Odkazy ModelBus odkazují na prvky FamilyTree DSL. V uzlu Reference v Dsl projektu řešení MusicLibrary přidejte odkazy na následující sestavení:

  • Fabrikam.FamilyTree.Dsl.dll. Vystavený DSL.

  • Fabrikam.FamilyTree.ModelBusAdapters.dll adaptér ModelBus vystaveného DSL.

  • Microsoft.VisualStudio.Modeling.Sdk.Integration

  • Microsoft.VisualStudio.Modeling.Sdk.Integration.Shell

    Tato sestavení lze nalézt v ModelBusAdapters projektu vystaveného DSL v části *bin\**.

    V souboru kódu, ve kterém vytváříte odkazy, obvykle musíte importovat tyto obory názvů:

// 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;
...

Vytvoření odkazu na model

Pokud chcete vytvořit odkaz na model, přejděte k adapterManageru pro vystavený DSL a použijte ho k vytvoření odkazu na model. Můžete zadat cestu k souboru nebo EnvDTE.ProjectItem.

Z adaptérManageru můžete získat adaptér, který poskytuje přístup k jednotlivým prvkům modelu.

Poznámka:

Adaptér musíte likvidovat, až ho dokončíte. Nejpohodlnější způsob, jak toho dosáhnout, je příkaz using . Toto dokládá následující příklad.

// 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

Pokud chcete později použít modelReference , můžete ho uložit do vlastnosti domény, která má externí typ ModelBusReference:

using Transaction t = this.Store.TransactionManager
    .BeginTransaction("keep reference"))
{
  artist.FamilyTreeReference = modelReference;
  t.Commit();
}

Chcete-li uživatelům povolit úpravy této vlastnosti domény, použijte ModelReferenceEditor jako parametr v atributu Editor . Další informace naleznete v tématu Povolit uživateli upravit odkaz.

Vytvoření odkazu na prvek

Adaptér, který jste vytvořili pro model, se dá použít k vytváření a překladu odkazů.

// person is an element in the FamilyTree model:
ModelBusReference personReference =
  adapter.GetElementReference(person);

Pokud chcete být schopni použít elementReference později, můžete ji uložit do vlastnosti domény, která má externí typ ModelBusReference. Pokud chcete uživatelům povolit jeho úpravy, použijte ModelElementReferenceEditor ho jako parametr v atributu Editor . Další informace naleznete v tématu Povolit uživateli upravit odkaz.

Řešení odkazů

Pokud máte ( ModelBusReference MBR), můžete získat model nebo prvek modelu, na který odkazuje. Pokud je prvek prezentován v diagramu nebo jiném zobrazení, můžete otevřít zobrazení a vybrat prvek.

Adaptér můžete vytvořit z MBR. Z adaptéru můžete získat kořen modelu. Můžete také vyřešit soubory MBR, které odkazují na konkrétní prvky v 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.

Řešení ModelBusReferences v textové šabloně

DSL, ke kterému chcete získat přístup, musí mít adaptér ModelBus nakonfigurovaný pro přístup pomocí textových šablon. Další informace naleznete v tématu Poskytování přístupu k DSL.

Obvykle přistupujete k cílové DSL pomocí odkazu sběrnice modelu (MBR) uložené ve zdrojovém DSL. Vaše šablona proto obsahuje direktivu zdrojové DSL a kód pro překlad MBR. Další informace o textových šablonách najdete v tématu Generování kódu z jazyka specifického pro doménu.

<#@ 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 an 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 #>]]
<#
  }
#>

Další informace a návod najdete v tématu Použití sady Visual Studio ModelBus v textové šabloně.

Serializace ModelBusReference

Pokud chcete uložit ( ModelBusReference MBR) ve formě řetězce, můžete ho serializovat:

string serialized = modelBus.SerializeReference(elementReference);
// Store it anywhere, then get it back again:
ModelBusReference elementReferenceRestored =
    modelBus.DeserializeReference(serialized, null);

MBR, který je serializován tímto způsobem, je nezávislý na kontextu. Pokud používáte jednoduchý souborový adaptér sběrnice modelu, obsahuje MBR absolutní cestu k souboru. Pokud se soubory modelu instance nikdy nepřesouvají, je tato serializace dostatečná. Soubory modelu jsou ale obvykle položky v projektu sady Visual Studio. Vaši uživatelé očekávají, že budou moct přesunout celý projekt do různých částí systému souborů. Očekávají také, že budou mít projekt pod správou zdrojového kódu a otevřít ho na různých počítačích. Názvy cest by proto měly být serializovány vzhledem k umístění projektu, který obsahuje soubory.

Serializace vzhledem k zadané cestě k souboru

A ModelBusReference obsahuje ReferenceContext, což je slovník, ve kterém můžete ukládat informace, jako je cesta k souboru vzhledem k tomu, ke kterému by měla být serializována.

Serializace vzhledem k cestě:

elementReference.ReferenceContext.Add(
   ModelBusReferencePropertySerializer.FilePathSaveContextKey,
   currentProjectFilePath);
string serialized = modelBus.SerializeReference(elementReference);

Načtení odkazu z řetězce:

ReferenceContext context = new ReferenceContext();
context.Add(ModelBusReferencePropertySerializer.FilePathLoadContextKey,
    currentProjectFilePath);
ModelBusReference elementReferenceRestored =
    modelBus.DeserializeReference(serialized, context);

Odkazy modeluBus vytvořené jinými adaptéry

Následující informace jsou užitečné, pokud chcete vytvořit vlastní adaptér.

A ModelBusReference (MBR) se skládá ze dvou částí: hlavičky MBR, která je deserializována sběrnici modelu, a adaptérem, který zpracovává konkrétní správce adaptéru. Tento přístup umožňuje poskytnout vlastní formát serializace adaptéru. Můžete například odkazovat na databázi místo souboru nebo můžete do odkazu na adaptér uložit další informace. Vlastní adaptér může umístit další informace do ReferenceContextsouboru .

Při deserializaci MBR, musíte zadat ReferenceContext, který je pak uložen v objektu MBR. Při serializaci MBR se uložený OdkazContext používá adaptér k vygenerování řetězce. Deserializovaný řetězec neobsahuje všechny informace v ReferenceContext. Například v jednoduchém adaptéru založeném na souborech obsahuje ReferenceContext cestu ke kořenovému souboru. Cesta není uložena v serializovaném řetězci MBR.

MBR je deserializován ve dvou fázích:

  • ModelBusReferencePropertySerializer je standardní serializátor, který se zabývá hlavičkou MBR. Používá standardní kontejner vlastností DSL SerializationContext , který je uložen v ReferenceContext klíči ModelBusReferencePropertySerializer.ModelBusLoadContextKey. Zejména SerializationContext by měl obsahovat instanci ModelBus.

  • Adaptér ModelBus se zabývá částí MBR specifické pro adaptér. Může použít další informace uložené v OdkazuContext MBR. Jednoduchý adaptér založený na souborech udržuje kořenové cesty k souborům pomocí klíčů FilePathLoadContextKey a FilePathSaveContextKey.

    Odkaz na adaptér v souboru modelu je deserializován pouze při jeho použití.

Vytvořit model

Vytvoření, otevření a úprava modelu

Následující fragment pochází z ukázky stavového počítače na webu VMSDK. Ukazuje použití ModelBusReferences k vytvoření a otevření modelu a získání diagramu přidruženého k modelu.

V této ukázce je název cílového DSL StateMachine. Z něj je odvozeno několik názvů, například název třídy modelu a název 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();
    }
}

Ověření odkazů

BrokenReferenceDetector testuje všechny vlastnosti domény v úložišti, které mohou obsahovat ModelBusReferences. Volá akci, kterou zadáte tam, kde se najde jakákoli akce. Tento test je užitečný pro metody ověřování. Následující metoda ověřování testuje úložiště při pokusu o uložení modelu a hlásí přerušené odkazy v okně chyb:

[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 this ReferenceState instance "
  + "named '{1}' contains reference value '{2}' which is invalid";

Akce prováděné rozšířením ModelBus

Následující informace můžou být užitečné, pokud modelBus používáte v rozsáhlém rozsahu.

Rozšíření ModelBus provede v řešení DSL následující změny.

Když kliknete pravým tlačítkem myši na diagram definice DSL, vyberte Povolit modelbus a pak vyberte Povolit tento DSL využívat ModelBus:

  • V projektu DSL by se měl přidat odkaz do Microsoft.VisualStudio.Modeling.Sdk.Integration.dll.

  • V definici DSL je přidán odkaz na externí typ: Microsoft.VisualStudio.Modeling.Integration.ModelBusReference.

    Odkaz můžete zobrazit v Průzkumníku DSL v části Typy domén. Pokud chcete odkazy na externí typ přidat ručně, klikněte pravým tlačítkem myši na kořenový uzel.

  • Přidá se nový soubor šablony Dsl\GeneratedCode\ModelBusReferencesSerialization.tt.

Když nastavíte typ vlastnosti domény na ModelBusReference, klikněte pravým tlačítkem myši na vlastnost a vyberte Povolit vlastnosti Specifické pro ModelBusReference:

  • Do vlastnosti domény se přidá několik atributů CLR. Můžete je zobrazit v poli Vlastní atributy v okně Vlastnosti . V dsl\GeneratedCode\DomainClasses.cs můžete zobrazit atributy deklarace vlastnosti:

    [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")]
    

Když kliknete pravým tlačítkem myši na diagram definice DSL, vyberte Povolit ModelBus a vyberte Zveřejnit tuto DSL modelbusu:

  • Do řešení se přidá nový projekt ModelBusAdapter .

  • Do projektu se přidá DslPackage odkazModelBusAdapter. ModelBusAdapter obsahuje odkaz na Dsl projekt.

  • V DslPackage\source.extention.tt|ModelBusAdapter| se přidá jako součást MEF.