指定DDEX的实例支持实体不应直接返回到客户端。相反,应通过与基础提供程序对象进行交互的客户端包装对象返回它们。
继承层次结构
System.Object
System.Attribute
Microsoft.VisualStudio.Data.Core.DataClientObjectAttribute
命名空间: Microsoft.VisualStudio.Data.Core
程序集: Microsoft.VisualStudio.Data.Core(在 Microsoft.VisualStudio.Data.Core.dll 中)
语法
声明
<AttributeUsageAttribute(AttributeTargets.Class Or AttributeTargets.Interface)> _
Public NotInheritable Class DataClientObjectAttribute _
Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Interface)]
public sealed class DataClientObjectAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Class|AttributeTargets::Interface)]
public ref class DataClientObjectAttribute sealed : public Attribute
[<Sealed>]
[<AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Interface)>]
type DataClientObjectAttribute =
class
inherit Attribute
end
public final class DataClientObjectAttribute extends Attribute
DataClientObjectAttribute 类型公开以下成员。
构造函数
名称 | 说明 | |
---|---|---|
![]() |
DataClientObjectAttribute | 初始化 DataClientObjectAttribute 选件类的新实例,指定选件类ID. |
页首
属性
名称 | 说明 | |
---|---|---|
![]() |
ClassId | 获取标识客户端对象类类型的选件类ID。 |
![]() |
TypeId | 当在派生类中实现时,获取该 Attribute 的唯一标识符。 (继承自 Attribute。) |
页首
方法
名称 | 说明 | |
---|---|---|
![]() |
Equals | 基础结构。返回一个值,该值指示此实例是否与指定的对象相等。 (继承自 Attribute。) |
![]() |
GetHashCode | 返回此实例的哈希代码。 (继承自 Attribute。) |
![]() |
GetType | 获取当前实例的 Type。 (继承自 Object。) |
![]() |
IsDefaultAttribute | 当在派生类中重写时,指示此实例的值是否是派生类的默认值。 (继承自 Attribute。) |
![]() |
Match | 当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。 (继承自 Attribute。) |
![]() |
ToString | 返回表示当前对象的字符串。 (继承自 Object。) |
页首
显式接口实现
名称 | 说明 | |
---|---|---|
![]() ![]() |
_Attribute.GetIDsOfNames | 将一组名称映射为对应的一组调度标识符。 (继承自 Attribute。) |
![]() ![]() |
_Attribute.GetTypeInfo | 检索对象的类型信息,然后可以使用该信息获取接口的类型信息。 (继承自 Attribute。) |
![]() ![]() |
_Attribute.GetTypeInfoCount | 检索对象提供的类型信息接口的数量(0 或 1)。 (继承自 Attribute。) |
![]() ![]() |
_Attribute.Invoke | 提供对某一对象公开的属性和方法的访问。 (继承自 Attribute。) |
页首
备注
当DDEX客户端调用DDEX运行时创建DDEX的实例时支持特定提供程序的实体,提供程序对象通常会创建并返回直接写到客户端。在这种情况下,客户端具有一个直接处理到提供程序的实现。有时,那么,当它与客户端时进行交互,DDEX定义的所有者支持实体可能需要定义支持实体的附加或修改的行为。这可能帮助满足客户端需要,而不将提供程序编写器的额外工作。
此要求的最常见示例随附DDEX连接服务的形式,例如 IVsDataCommand 支持实体。IVsDataConnection的函数,DDEX连接对象,来尽量减少在客户端所需的开销确保连接是当前打开并且不使用由另一个客户端,但是,同时取消对这些来说问题在提供程序端。因此特定连接服务可能没有客户端对象与它执行额外的逻辑确保连接已打开且正确共享在多个客户端。此实现包装基础提供程序对象和自动提供给客户端在DDEX运行时。
DDEX支持要使DDEX运行时返回客户端在提供程序创建的包装对象支持实体应包括在类型的该属性表示支持实体的实体。特性必须包含 ClassId 属性的值,则,表示在Visual Studio环境中注册的选件类ID的值必须是有效的GUID。最后,选件类ID标识的选件类必须是 IVsDataClientObject<T> 实现接口的托管选件类。当需要由客户端,DDEX运行时首先创建基础提供程序对象的实例。然后它将创建具有指定的选件类ID.选件类的实例接下来,将通过调用与基础提供程序对象的 Initialize 方法初始化客户端对象。客户端对象将传回到客户端。
DataClientObjectAttribute 特性主要是给DDEX平台扩展程序,即,创建额外的DDEX的服务和支持实体。
示例
下面的代码演示定义虚拟支持声明客户端对象属性的实体。该定义由此客户端对象的实现后面,添加简单记录对支持实体。
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio.Data.Core;
namespace DataClientObjectAttrib
{
[DataClientObject("1520C77F-09AF-40b4-B1FE-53C30A177C59")]
public interface IVsDataSupportEntity
{
void DoSomething();
}
[Guid("1520C77F-09AF-40b4-B1FE-53C30A177C59")]
internal class ClientSupportEntity : IVsDataSupportEntity,
IVsDataClientObject<IVsDataSupportEntity>
{
private IVsDataSupportEntity _providerObj;
public void Initialize(IVsDataSupportEntity providerObj)
{
if (providerObj == null)
{
throw new ArgumentNullException("providerObj");
}
_providerObj = providerObj;
}
public void DoSomething()
{
Trace.WriteLine("DoSomething started.");
_providerObj.DoSomething();
Trace.WriteLine("DoSomething finished.");
}
}
}
线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。