Практическое руководство. Открытие модели UML с помощью API Visual Studio
Также модели и схемы можно открыть в пользовательском интерфейсе Visual Studio с помощью API.
Если необходимо всего лишь прочитать модель в коде программы без ее отображения, можно воспользоваться следующими методами:
Шина модели Visual Studio позволяет получить доступ к моделям и элементам внутри них, а также предоставляет стандартный метод создания связей между моделями.Дополнительные сведения см. в разделе Практическое руководство. Интеграция моделей UML с другими моделями и средствами.
Модель можно открыть в режиме только для чтения.Дополнительные сведения см. в разделе Практическое руководство. Чтение модели UML в программном коде.
Открытие моделей и схем в Visual Studio
Чтобы открыть модель в пользовательском интерфейсе, воспользуйтесь стандартным Visual Studio API EnvDTE.DTE.Существует два полезных приведения, которые можно выполнить над элементами проекта моделирования:
EnvDTE.Project можно привести к IModelingProject и из него, если проект является проектом моделирования, а также если проект загружен в текущем домене приложения.
EnvDTE.ProjectItem можно привести к IDiagramContext и из него, если элемент является схемой UML.
Для следующего примера проект должен импортировать ссылки.
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
Этот пример открывает UML-модель в 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
...
Это объявление можно сделать в расширении Visual Studio, чтобы получить доступ к поставщик услуг узла:
[Import] public Microsoft.VisualStudio.Shell.SVsServiceProvider ServiceProvider {get;set;}
...
Доступ к проекту, например текущему проекту, можно получить через метод:
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;
...
}
}
}