Procedura: aprire un modello UML tramite l'API di Visual Studio
È inoltre possibile aprire modelli e diagrammi nell'interfaccia utente di Visual Studio tramite l'API.
Se si desidera solo leggere un modello in un codice programma senza renderlo visibile all'utente, è possibile utilizzare i metodi seguenti:
Model Bus di Visual Studio consente di accedere a modelli ed elementi in essi contenuti e fornisce un metodo standard per creare collegamenti tra modelli. Per ulteriori informazioni, vedere Procedura: integrare i modelli UML con altri modelli e strumenti.
È possibile aprire un modello in modalità di sola lettura. Per ulteriori informazioni, vedere Procedura: leggere un modello UML nel codice del programma.
Apertura di modelli e diagrammi in Visual Studio
Per aprire un modello nell'interfaccia utente, utilizzare l'API EnvDTE.DTE standard di Visual Studio. Sono disponibili due cast utili che è possibile eseguire sugli elementi del progetto di modello:
EnvDTE.Project consente l'esecuzione del cast da e verso IModelingProject, se il progetto è un progetto di modello e se è caricato nell'AppDomain corrente.
EnvDTE.ProjectItem consente l'esecuzione del cast da e in IDiagramContext, se l'elemento è un diagramma UML.
Per l'esempio seguente, il progetto deve importare i riferimenti indicati:
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
Tramite questo esempio viene aperto un modello UML in Visual Studio:
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 un'estensione di Visual Studio è possibile utilizzare questa dichiarazione per ottenere l'accesso al provider del servizio host:
[Import] public Microsoft.VisualStudio.Shell.SVsServiceProvider ServiceProvider {get;set;}
...
In un metodo è possibile accedere a un progetto, ad esempio, il progetto corrente:
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;
...
}
}
}