将自定义数据与 SharePoint 工具扩展相关联
可以向 SharePoint 工具扩展中的某些对象添加自定义数据。 如果您的数据位于扩展的一部分中,而稍后您想从扩展中的其他代码访问该数据,则建立关联对于这种情况非常有用。 您可以将数据与扩展中的某个对象相关联,然后从相同的对象检索数据,而不是实现一种用于存储和访问数据的自定义方式。
向对象中添加自定义数据对于您希望保留与 Visual Studio 中特定项相关的数据这种情况也非常有用。 由于 SharePoint 工具扩展在 Visual Studio 中只加载一次,因此您的扩展随时可能会用于多个不同的项(如项目、项目项或 Server Explorer 节点)。 如果您的自定义数据只与特定项相关,则可以将该数据添加到表示该项的对象中。
在向 SharePoint 工具扩展中的对象添加自定义数据时,该数据不会保留。 该数据仅在该对象的生存期内可用。 在垃圾回收功能将该对象回收之后,数据将丢失。
在 SharePoint 项目系统的扩展中,还可以保存在卸载扩展后继续存在的字符串数据。 有关更多信息,请参见在 SharePoint 项目系统的扩展中保存数据。
可包含自定义数据的对象
可以将自定义数据添加到 SharePoint 工具对象模型中实现 IAnnotatedObject 接口的任何对象。 此接口只定义一个属性(即 Annotations),该属性是自定义数据对象的集合。 以下类型实现 IAnnotatedObject:
Microsoft.VisualStudio.SharePoint.ISharePointProjectFeatureResourceFile
Microsoft.VisualStudio.SharePoint.ISharePointProjectItemFile
Microsoft.VisualStudio.SharePoint.ISharePointProjectItemType
Microsoft.VisualStudio.SharePoint.ISharePointProjectItemTypeDefinition
Microsoft.VisualStudio.SharePoint.Deployment.IDeploymentContext
Microsoft.VisualStudio.SharePoint.Explorer.IExplorerNodeType
Microsoft.VisualStudio.SharePoint.Explorer.IExplorerNodeTypeDefinition
添加和检索自定义数据
若要将自定义数据添加到 SharePoint 工具扩展中的某个对象,请获取要将数据添加到的对象的 Annotations 属性,然后使用 IAnnotationDictionary.Add() 方法将数据添加到该对象中。
若要从 SharePoint 工具扩展中的某个对象检索自定义数据,请获取该对象的 Annotations 属性,然后使用下列方法之一:
IAnnotationDictionary.TryGetValue(). 如果该数据对象存在,则此方法返回 true;如果该数据对象不存在,则返回 false。 可以使用此方法检索值类型或引用类型的实例。
IAnnotationDictionary.GetValue(). 如果该数据对象存在,则此方法返回该数据对象;如果该数据对象不存在,则返回 null。 可以使用此方法仅检索引用类型的实例。
下面的代码示例确定某个特定数据对象是否已与一个项目项相关联。 如果该数据对象尚未与该项目项相关联,则代码会将该对象添加到该项目项的 Annotations 属性中。 若要在一个更大的示例上下文中查看此示例,请参见如何:向自定义 SharePoint 项目项类型中添加属性。
Private Sub ProjectItemPropertiesRequested(ByVal Sender As Object,
ByVal e As SharePointProjectItemPropertiesRequestedEventArgs)
Dim propertyObject As CustomProperties = Nothing
' If the properties object already exists, get it from the project item's annotations.
If False = e.ProjectItem.Annotations.TryGetValue(propertyObject) Then
' Otherwise, create a new properties object and add it to the annotations.
propertyObject = New CustomProperties(e.ProjectItem)
e.ProjectItem.Annotations.Add(propertyObject)
End If
e.PropertySources.Add(propertyObject)
End Sub
void projectItemTypeDefinition_ProjectItemPropertiesRequested(object sender,
SharePointProjectItemPropertiesRequestedEventArgs e)
{
CustomProperties property;
// If the properties object already exists, get it from the project item's annotations.
if (!e.ProjectItem.Annotations.TryGetValue(out property))
{
// Otherwise, create a new properties object and add it to the annotations.
property = new CustomProperties(e.ProjectItem);
e.ProjectItem.Annotations.Add(property);
}
e.PropertySources.Add(property);
}