Partilhar 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 Chama um método no objeto com os parâmetros adicionais não atual na assinatura do método.

Superior

Comentários

A arquitetura de DDEX é especialmente dados dinâmicos 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 esta, uma entidade de suporte foi criada cuja objetivo é retornar um fluxo de XML que corresponda a um esquema conhecido para o chamador. O chamador em interpreta este XML e usa-o para controlar a área de extensibilidade.

Como parte dessa abordagem, o fluxo de XML contém geralmente referências de volta ao código na forma de nomes gerenciados de 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 desses 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 disso é 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 que indica o identificador do tipo subjacente de objeto para recuperar e em seguida, no suporte XML do objeto inclua o valor correto para este parâmetro na referência do seletor para cada tipo.

O objetivo desta interface é permitir 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 da chamada de método de associação tardia que é manipulada adequadamente pela implementação do provedor. A interface define um único método de Invoke ao 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 como inserir parâmetros em 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 referencia o único tipo que implementa um serviço de DSRefBuilder para esses tipos. Depois disso é 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