本主题介绍了层模型中的元素和关系,你可以使用程序代码在 Visual Studio 旗舰版 中导航和更新层模型。

有关从用户角度来看的层关系图的详细信息,请参阅层关系图:参考层关系图:指南

本主题中描述的 Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer 模型是更通用 Microsoft.VisualStudio.GraphModel 模型的外观。 如果要编写菜单命令或笔势扩展,请使用 Layer 模型。 如果要编写层验证扩展,则使用 GraphModel 更为方便。

事务

更新模型时,请考虑将更改包含在一个 ILinkedUndoTransaction 中。 这会将你所做的更改分组到一个事务。 如果有任何更改失败,则将回滚整个事务。 如果用户撤消一个更改,将一起撤消所有更改。

有关详细信息,请参阅如何:使用事务链接模型更新

using (ILinkedUndoTransaction t =
        LinkedUndoContext.BeginTransaction("a name"))
{ 
    // Make changes here ....
    t.Commit(); // Don't forget this!
}

包容

ILayer 和 ILayerModel 都可以包含 ILayers。

层 (ILayer) 和层模型 (ILayerModel) 可以包含注释和层。

层 (ILayer) 可以包含在层模型 (ILayerModel) 中,也可以嵌套在另一个 ILayer 中。

若要创建注释或层,则对相应容器使用创建方法。

依赖关系链接

依赖关系链接由一个对象表示。 可以在任一方向导航链接:

一个 ILayerDependencyLink 连接到两个 ILayers。

若要创建依赖关系链接,请调用 source.CreateDependencyLink(target)。

注释

注释可以包含在层或层模型内部,也可以链接到任何层元素:

可以将注释附加到任何层元素。

注释可以链接到任意数量的元素,也可以不链接任何元素。

若要获取附加到层元素的注释,请使用:

ILayerModel model = diagram.GetLayerModel(); 
IEnumerable<ILayerComment> comments = 
   model.Comments.Where(comment => 
      comment.Links.Any(link => link.Target == layerElement));

警告

ILayer 的 Comments 属性可获取包含在 ILayer 内的注释。但不会获取链接到它的注释。

通过对相应容器调用 CreateComment() 来创建注释。

通过对注释使用 CreateLink() 来创建链接。

层元素

可包含在一个模型中的所有类型的元素都是层元素:

层关系图内容为 ILayerElements。

属性

每个 ILayerElement 都有一个名为 Properties 的字符串字典。 可以使用此字典将任意信息附加到任何层元素。

项目引用

项目引用 (ILayerArtifactReference) 表示层和项目项(例如文件、类或文件夹)之间的链接。 当用户通过将项从“解决方案资源管理器”或“体系结构资源管理器”拖动到层关系图上来创建或添加层时,同时也在创建项目。 可将任意数量的项目引用链接到一个层。

“层资源管理器”中的每一行都显示一个项目引用。 有关详细信息,请参阅从代码创建层关系图

下面是与项目引用有关的主要类型和方法:

ILayerArtifactReference. Categories 属性指示引用的项目类型,例如类、可执行文件或程序集。 Categories 确定标识符标识目标项目的方式。

CreateArtifactReferenceAsyncProjectProjectItem 创建项目引用。 这是一个异步操作。 因此,你通常要提供一个在创建操作完成时调用的回调。

层项目引用不应与用例关系图中的项目混淆。

形状和关系图

使用两个对象表示层模型中的每个元素:ILayerElementIShape。 IShape 表示关系图上形状的位置和大小。 在层模型中,每个 ILayerElement 都有一个 IShape,层关系图上的每个 IShape 都有一个 ILayerElement。 IShape 还用于 UML 模型。 因此,并不是每一个 IShape 都具有层元素。

按同样的方式,ILayerModel 显示在一个 IDiagram 上。

在自定义命令或笔势处理程序的代码中,你可以从 DiagramContext 导入中获取当前关系图和当前选择的形状:

public class ... {
[Import]
    public IDiagramContext DiagramContext { get; set; }
...
public void ... (...) 
{ IDiagram diagram = this.DiagramContext.CurrentDiagram;
  ILayerModel model = diagram.GetLayerModel();
  if (model != null)
  { foreach (ILayer layer in model.Layers) { ... }}
  foreach (IShape selected in diagram.SelectedShapes)
  { ILayerElement element = selected.GetLayerElement();
    if (element != null) ... }}

每个 ILayerElement 都由一个 IShape 表示。

IShapeIDiagram 也用于显示 UML 模型。 有关详细信息,请参阅如何:在关系图上显示模型

请参见

概念

向层关系图添加命令和特定动作

向层关系图添加自定义体系结构验证

向层关系图添加自定义属性

层关系图:参考

层关系图:指南

扩展 UML 模型和关系图