Gewusst wie: Öffnen eines UML-Modells mit der Visual Studio-API
Mithilfe der API können Sie auch Modelle und Diagramme auf der Visual Studio-Benutzeroberfläche öffnen.
Wenn Sie lediglich ein Modell im Programmcode lesen möchten, ohne dass es dem Benutzer angezeigt wird, können Sie die folgenden Methoden verwenden:
Der Modellbus von Visual Studio ermöglicht den Zugriff auf Modelle und die darin enthaltenen Elemente und bietet eine Standardmethode zum Erstellen von Links zwischen Modellen. Weitere Informationen finden Sie unter Gewusst wie: Integrieren von UML-Modellen in andere Modelle und Tools.
Ein Modell kann im schreibgeschützten Modus geöffnet werden. Weitere Informationen finden Sie unter Gewusst wie: Lesen eines UML-Modells im Programmcode.
Öffnen von Modellen und Diagrammen in Visual Studio
Verwenden Sie die Visual Studio-Standard-API EnvDTE.DTE, um ein Modell auf der Benutzeroberfläche zu öffnen. Für Modellierungsprojektelemente können zwei hilfreiche Umwandlungen ausgeführt werden:
EnvDTE.Project kann in IModelingProject umgewandelt werden (und umgekehrt), sofern es sich bei dem Projekt um ein Modellierungsprojekt handelt und das Projekt in der aktuellen Anwendungsdomäne geladen ist.
EnvDTE.ProjectItem kann zu IDiagramContext umgewandelt werden (und umgekehrt), wenn es sich bei dem Element um ein UML-Diagramm handelt.
Für das folgende Beispiel müssen vom Projekt die folgenden Verweise importiert werden:
EnvDTE
Microsoft.VisualStudio.ArchitectureTools.Extensibility
Microsoft.VisualStudio.Modeling.Sdk.10.0
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.10.0
Microsoft.VisualStudio.Uml.Interfaces
System.ComponentModel.Composition
In diesem Beispiel wird ein UML-Modell in Visual Studio geöffnet:
using EnvDTE; // Visual Studio API for loading diagrams
using
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.Modeling;
using Microsoft.VisualStudio.Modeling.ExtensionEnablement;
// for ICommandExtension and other handler types
using Microsoft.VisualStudio.Uml.Classes;
// for basic UML types
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
// for model construction methods
using EnvDTE;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility;
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation;
// for IDiagram
...
In einer Visual Studio-Erweiterung können Sie diese Deklaration vornehmen, um Zugriff auf den Hostdienstanbieter zu erhalten:
[Import] public Microsoft.VisualStudio.Shell.SVsServiceProvider ServiceProvider {get;set;}
...
In einer Methode können Sie auf ein Projekt (beispielsweise das aktuelle Projekt) zugreifen:
DTE dte = (DTE)ServiceProvider.GetService(typeof(DTE));
Project project = dte.ActiveDocument.ProjectItem.ContainingProject;
IModelingProject modelingProject = project as IModelingProject;
if (modelingProject == null) return; // not a modeling project
// Access the model's store and contents.
IModelStore store = modelingProject.Store;
foreach (IElement element in store.Root.OwnedElements) {...}
// Open all the project's diagrams.
foreach (ProjectItem item in project.ProjectItems)
{
IDiagramContext modelingItem = item as IDiagramContext;
if (modelingItem == null)
continue; // not a model diagram
IDiagram diagram = modelingItem.CurrentDiagram;
if (diagram == null)
{
// Diagram is closed. Open it.
item.Open().Activate();
diagram = modelingItem.CurrentDiagram;
}
// Access the shapes.
foreach (IShape<IElement> shape
in diagram.GetChildShapes<IElement>())
{
IElement displayedElement = shape.Element;
...
}
}
}