Aracılığıyla paylaş


Nasıl yapılır: Visual Studio API Kullanarak Bir UML Modeli Açma

Visual Studio kullanıcı arabiriminde API kullanarak modelleri ve diyagramları da açabilirsiniz.

Kullanıcıya görünür yapmadan sadece program kodundaki modeli okumak istiyorsanız aşağıdaki yöntemleri kullanabilirsiniz:

Visual Studio'da Modelleri ve Diyagramları Açma

Kullanıcı arabiriminde model açmak için standart Visual Studio API EnvDTE.DTE kullanın.Modelleme projesi öğeleri üzerinde gerçekleştirebileceğiniz iki yararlı dönüştürme vardır:

  • Eğer proje bir modelleme projesi ise ve geçerli AppDomain'e yüklenmişse EnvDTE.ProjectIModelingProject'e dönüşme ve ondan dönüştürme olabilir.

  • Eğer öğe bir UML diyagram ise EnvDTE.ProjectItemIDiagramContext'e dönüşebilir ve ondan dönüştürülebilir.

Aşağıdaki örnek için projenizin bu başvuruları içeri aktarması gerekir:

  • EnvDTE

  • Microsoft.VisualStudio.ArchitectureTools.Extensibility

  • Microsoft.VisualStudio.Modeling.SDK.11.0

  • Microsoft.VisualStudio.Modeling.SDK.Diagrams.11.0

  • Microsoft.VisualStudio.Shell.Immutable.11.0

  • Microsoft.VisualStudio.Uml.Interfaces

  • System.ComponentModel.Composition

Bu örnek Visual Studio içinde bir UML modeli açar:

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

Visual Studio uzantısında ana hizmet sağlayıcısına erişimi sağlamak için bu bildirimi yapabilirsiniz:

[Import] public Microsoft.VisualStudio.Shell.SVsServiceProvider ServiceProvider {get;set;}
...

Yöntemde projeye ulaşabilirsiniz, örneğin geçerli proje:

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

Ayrıca bkz.

Kavramlar

UML API ile Programlama

UML Modellerini ve Diyagramları Genişletme