Compartilhar via


Interface IVsDataSupportObject<T>

Representa um objeto que é criado com base nas informações de referência fornecida em um fluxo XML de suporte de dados.

Namespace:  Microsoft.VisualStudio.Data.Core
Assembly:  Microsoft.VisualStudio.Data.Core (em Microsoft.VisualStudio.Data.Core.dll)

Sintaxe

'Declaração
Public Interface IVsDataSupportObject(Of T As Class)
public interface IVsDataSupportObject<T>
where T : class
generic<typename T>
where T : ref class
public interface class IVsDataSupportObject
type IVsDataSupportObject<'T when 'T : not struct> =  interface end
JScript não oferece suporte a tipos ou métodos genéricos.

Parâmetros de tipo

  • T
    O tipo de parâmetro.

O tipo IVsDataSupportObject<T> expõe os membros a seguir.

Métodos

  Nome Descrição
Método público Invoke Chame um método no objeto com os parâmetros adicionais não presentes na assinatura do método.

Superior

Comentários

A arquitetura de DDEX é especialmente dados e para áreas complexas de extensibilidade, como a representação da fonte de dados como um modelo de objeto ou em uma exibição hierárquica.Para obter essa, uma entidade de suporte foi criada cuja objetivo é retornar um fluxo de XML que corresponda a um esquema conhecido para o chamador.O chamador interpreta em este XML e usa-o para controlar a área de extensibilidade.

Como parte de essa abordagem, o fluxo de XML geralmente contém referências de volta ao código na forma de nomes gerenciados do tipo.O consumidor de fluxo XML usa o método de GetType para resolver esses nomes em tipos reais, e então cria instâncias de esses tipos conforme apropriado.O esquema XML que circunda a referência de tipo geralmente inclui um conjunto de parâmetros que podem ser passados para uma instância, permitindo que o mesmo tipo é usado em várias condições.

Um exemplo de isso é a prática a entidade de suporte de IVsDataObjectSelector .Este objeto de suporte é referenciada de partes de fluxo XML de suporte do objeto de dados que especificam informações sobre tipos de objeto de fonte de dados, como tabelas ou procedimentos armazenados.Seria possível escrever uma implementação de seleção que usa um único parâmetro indica que o identificador de tipo subjacente de objeto para recuperar e em seguida, no suporte XML do objeto inclui o valor correto para este parâmetro na referência de seletor para cada tipo.

O objetivo de esta interface é permitir que passar esses parâmetros para métodos em uma entidade de suporte sem ter que adicionar métodos ou parâmetros adicionais para ativar este cenário parametrizada.Isso é feito usando uma abordagem de chamada do método de associação tardia que é manipulada adequadamente pela implementação do provedor.A interface define um único método da Invoke que o chamador passa o nome do método para chamar, seu conjunto comum de argumentos, e um conjunto de parâmetros para especializar o comportamento do método.O formato de parâmetros depende do chamador.Por exemplo, até o esquema XML de suporte do objeto de dados para definir parâmetros sobre como incorporar XML e como esses parâmetros traduzirão na matriz de objetos de parâmetros passados para a implementação.

Exemplos

O código a seguir mostra um exemplo de suporte XML do objeto de dados que define informações sobre dois tipos de objeto de dados, incluindo faz referência a um único tipo que implementa um serviço de DSRefBuilder para esses tipos.Depois de isso é o código que implementa a interface de IDSRefBuilder como um objeto de suporte de dados.XML passar parâmetros diferentes para cada tipo, e a implementação do seletor mostra a seleção dos caminhos de código diferente, dependendo dos parâmetros.Observe que em casos mais típicos, os valores de parâmetro será usado em uma forma mais genérica de modo que o código não esteja ciente de valores específicos, por exemplo no caso de passar parâmetros para baixo para outro API que faz o trabalho.

XML:

<Type name="Table">
    <Identifier>
        <Part name="Name" />
    </Identifier>
    <Properties>
        <Property name="Id" type="System.Int32" />
    </Properties>
    <Services>
        <Service type="IDSRefBuilder"
            implementationType="MyDSRefBuilder">
            <Parameters method="AppendToDSRef">
                <Parameter value="DSREFTYPE_TABLE" />
            </Parameters>
        </Service>
    </Services>
</Type>
<Type name="View">
    <Identifier>
        <Part name="Name" />
    </Identifier>
    <Properties>
        <Property name="Id" type="System.Int32" />
    </Properties>
    <Services>
        <Service type="IDSRefBuilder"
            implementationType="MyDSRefBuilder">
            <Parameters method="AppendToDSRef">
                <Parameter value="DSREFTYPE_VIEW" />
            </Parameters>
        </Service>
    </Services>
</Type>
using System;
using Microsoft.VisualStudio.Data.Core;
using Microsoft.VisualStudio.Data.Services.SupportEntities;
using Microsoft.VisualStudio.Data.Services.SupportEntities.Interop;

internal class MyDSRefBuilder : IDSRefBuilder,
    IVsDataSupportObject<IDSRefBuilder>
{
    public void AppendToDSRef(
        object dsRef, string typeName, object[] identifier)
    {
        AppendToDSRef(dsRef, typeName, identifier, null);
    }

    object IVsDataSupportObject<IDSRefBuilder>.Invoke(
        string name, object[] args, object[] parameters)
    {
        if (name == null)
        {
            throw new ArgumentNullException("name");
        }
        if (name.Equals("AppendToDSRef", StringComparison.Ordinal))
        {
            if (args == null || args.Length != 3)
            {
                throw new ArgumentException();
            }
            AppendToDSRef(args[0], args[1] as string,
                args[2] as object[], parameters);
            return null;
        }
        throw new ArgumentException();
    }

    private void AppendToDSRef(object dsRef,
        string typeName, object[] identifier, object[] parameters)
    {
        if (parameters == null || parameters.Length == 0)
        {
            throw new ArgumentException();
        }
        string dsRefType = parameters[0] as string;
        if (dsRefType.Equals("DSREFTYPE_TABLE"))
        {
            AppendTableToDSRef(dsRef, identifier);
        }
        else if (dsRefType.Equals("DSREFTYPE_VIEW"))
        {
            AppendViewToDSRef(dsRef, identifier);
        }
    }

    private void AppendTableToDSRef(object dsRef, object[] identifier)
    {
        // Append table
    }

    private void AppendViewToDSRef(object dsRef, object[] identifier)
    {
        // Append view
    }
}

Consulte também

Referência

Namespace Microsoft.VisualStudio.Data.Core