Classe DataClientObjectAttribute
Especifica que as instâncias de um entidade de suporte de DDEX não devem ser diretamente retornadas para clientes.Em vez de isso, eles devem ser retornados por um objeto invólucro de cliente que interage com o objeto subjacente do provedor.
Hierarquia de herança
System.Object
System.Attribute
Microsoft.VisualStudio.Data.Core.DataClientObjectAttribute
Namespace: Microsoft.VisualStudio.Data.Core
Assembly: Microsoft.VisualStudio.Data.Core (em Microsoft.VisualStudio.Data.Core.dll)
Sintaxe
'Declaração
<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
O tipo DataClientObjectAttribute expõe os membros a seguir.
Construtores
Nome | Descrição | |
---|---|---|
DataClientObjectAttribute | Inicializa uma nova instância da classe de DataClientObjectAttribute , especificando a identificação de classe |
Superior
Propriedades
Nome | Descrição | |
---|---|---|
ClassId | Obtém a identificação de classe que identifica o tipo da classe de objeto de cliente. | |
TypeId | Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute. (Herdado de Attribute.) |
Superior
Métodos
Nome | Descrição | |
---|---|---|
Equals | Infraestrutura. Retorna um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute.) | |
GetHashCode | Retorna o código hash para essa instância. (Herdado de Attribute.) | |
GetType | Obtém Type da instância atual. (Herdado de Object.) | |
IsDefaultAttribute | Quando substituído em uma classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada. (Herdado de Attribute.) | |
Match | Quando substituído em uma classe derivada, retorna um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute.) | |
ToString | Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object.) |
Superior
Implementações explícitas da interface
Nome | Descrição | |
---|---|---|
_Attribute.GetIDsOfNames | Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho. (Herdado de Attribute.) | |
_Attribute.GetTypeInfo | Recupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface. (Herdado de Attribute.) | |
_Attribute.GetTypeInfoCount | Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1). (Herdado de Attribute.) | |
_Attribute.Invoke | Fornece acesso a propriedades e métodos expostos por um objeto. (Herdado de Attribute.) |
Superior
Comentários
Quando um cliente de DDEX chama o tempo de execução de DDEX para criar uma instância de uma entidade suporte de DDEX para um provedor específico, o objeto do provedor normalmente é criado e retornado diretamente para o cliente.Em esse caso, o cliente tem um identificador direta a implementação do provedor.Em alguns casos, o proprietário de definição de entidade suporte de DDEX pode querer definir o comportamento adicional ou modificado para a entidade de suporte quando interage com o cliente.Isso pode ajudar a localizar expectativas de cliente sem adicionar o trabalho adicional para o gravador do provedor.
O exemplo mais comum de esse requisito vem na forma de serviços de conexão de DDEX, como a entidade de suporte de IVsDataCommand .Uma função de IVsDataConnection, o objeto de conexão de DDEX, minimizar a sobrecarga é necessária no lado do cliente para garantir que a conexão é aberta no momento e não sendo usado por outro cliente, mas ao mesmo tempo para eliminar interesses sobre esses problemas no provedor leva partido.Portanto um determinado serviço de conexão pode ter um cliente objeto associado com ele executa lógica adicional garantindo que a conexão é aberta e compartilhado entre vários clientes corretamente.Essa implementação envolve o objeto subjacente do provedor e é fornecida automaticamente para o cliente em tempo de execução de DDEX.
As entidades de suporte de DDEX para que você pretende ter o retorno de tempo de execução de DDEX um objeto invólucro de cliente em cima de criação de entidade de suporte do provedor devem incluir o atributo no tipo que representa a entidade de suporte.O atributo deve incluir um valor para a propriedade de ClassId , e o valor GUID deve ser válido que representa uma identificação de classe registrada no ambiente do Visual Studio.Finalmente, a classe identificada por ID da classe deve ser uma classe gerenciada que implementa a interface de IVsDataClientObject<T> .Quando solicitado por um cliente, o tempo de execução de DDEX primeiro criará uma instância do objeto subjacente do provedor.Irá criar uma instância da classe que tem a identificação da classe especificadaEm seguida, inicializará o objeto cliente chamando o método de Initialize ao objeto subjacente do provedor.O objeto de cliente é então passado de volta para o cliente.
O atributo de DataClientObjectAttribute primeiro é útil para extensores da plataforma de DDEX, isto é, os que criam entidades adicionais de assistências e suporte de DDEX.
Exemplos
O código a seguir mostra a definição de uma entidade fictícia de suporte que declara um atributo de objetos de cliente.A definição é seguido pela implementação de esse objeto de cliente, que adiciona o log simples de chamadas para a entidade de suporte.
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.");
}
}
}
Acesso thread-safe
Quaisquer membros estático (Shared no Visual Basic) públicos deste tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.