在程序代码中导航和更新层模型

更新:2011 年 4 月

利用此 Visual Studio 2010 功能包,您可以使用程序代码在 Visual Studio 2010 旗舰版中导航和更新层模型。 本主题介绍层模型中的元素和关系。

有关从用户角度来看的层关系图的更多信息,请参见层关系图:参考层关系图:指南。 有关更多信息,请参见 Visual Studio 功能包

事务

更新模型时,请考虑将更改包含在一个 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 确定标识符标识目标项目的方式。

CreateArtifactReferenceAsync() 从 ProjectProjectItem 创建项目引用。 这是一个异步操作。 因此,您通常要提供一个在创建操作完成时调用的回调。

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

形状和关系图

使用两个对象表示层模型中的每个元素: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 模型。 有关更多信息,请参见如何:在关系图上显示模型

请参见

参考

Layer Diagrams: Guidelines

概念

层关系图:参考

扩展 UML 模型和关系图

其他资源

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

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

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

修订记录

日期

修订记录

原因

2011 年 4 月

添加了访问注释和属性的相关信息。

信息补充。