Freigeben über


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:

Ö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;
       ...
     }
   }
} 

Siehe auch

Weitere Ressourcen

Programmieren mit der UML-API

Erweitern von UML-Modellen und Diagrammen