Condividi tramite


Interfaccia IVsDataSupportObject<T>

Rappresenta un oggetto creato in base a informazioni di riferimento disponibili in un flusso XML di supporto di dati.

Spazio dei nomi:  Microsoft.VisualStudio.Data.Core
Assembly:  Microsoft.VisualStudio.Data.Core (in Microsoft.VisualStudio.Data.Core.dll)

Sintassi

'Dichiarazione
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 non supporta i tipi o i metodi generici.

Parametri di tipo

  • T
    Tipo del parametro.

Il tipo IVsDataSupportObject<T> espone i seguenti membri.

Metodi

  Nome Descrizione
Metodo pubblico Invoke Richiama un metodo nell'oggetto con parametri aggiuntivi non presenti nella firma del metodo.

In alto

Note

L'architettura di DDEX è principalmente dati per determinati regioni complesse di estensibilità, come rappresentazione dell'origine dati come modello a oggetti o in una visualizzazione gerarchica. A tale scopo, un'entità di supporto è stata creata con lo scopo di restituire un flusso XML che corrisponde a uno schema noto al chiamante. Il chiamante quindi interpreta questo XML e lo utilizza per verificare l'area di estensibilità.

Durante questo approccio, il flusso XML spesso contiene riferimenti al codice sotto forma del tipo gestito. L'utente del flusso XML utilizza il metodo di GetType per risolvere questi nomi nei tipi effettivi quindi crea istanze di tali tipi in base alle proprie esigenze. Lo Schema XML che circonda il riferimento del tipo comporta spesso un set di parametri che possono essere passati a un'istanza, consentendo lo stesso tipo da utilizzare in più condizioni.

Un esempio è rappresentato in pratica è l'entità di supporto di IVsDataObjectSelector. Questa entità di supporto viene fatto riferimento dalle parti del flusso XML di supporto dell'oggetto dati che specificano informazioni sui tipi di oggetto origine dati, ad esempio tabelle o stored procedure. È possibile creare un'implementazione del selettore che utilizza un solo parametro che indica l'identificatore sottostante del tipo di oggetto per recuperare e quindi il supporto XML dell'oggetto includere il valore corretto per questo parametro nel riferimento del selettore per ogni tipo.

Lo scopo di questa interfaccia è di consentire il passaggio dei parametri ai metodi in un'entità di supporto senza dover aggiungere metodi aggiuntivi o i parametri per abilitare questo scenario con parametri. Questa operazione viene eseguita utilizzando un approccio ad associazione tardiva di chiamata al metodo che viene gestito in modo appropriato dall'implementazione del provider. L'interfaccia definisce un singolo metodo di Invoke al chiamante passa il nome del metodo a invoke, il relativo set normale di argomenti e un insieme di parametri per specializzare il comportamento del metodo. Il formato dei parametri dipende dal chiamante. Ad esempio, spetta fino allo Schema XML di supporto dell'oggetto dati da definire sia come digitare i parametri in XML che come questi parametri tradurranno in una matrice di oggetti dei parametri passati all'implementazione.

Esempi

Il codice seguente viene illustrato un esempio del supporto XML oggetto dati che definisce le informazioni su due tipi di oggetto dati, inclusi i riferimenti a un tipo che implementa un servizio di DSRefBuilder per questi tipi. A seguito di questo è il codice che implementa l'interfaccia di IDSRefBuilder come un oggetto di supporto di dati. L'xml passare i parametri differenti per ogni tipo e l'implementazione del selettore illustrata la selezione dei due percorsi di codice diversi, a seconda dei parametri. Si noti che in un caso più comune, i valori del parametro viene utilizzato in modo più generico in modo che il codice non tenere presenti i valori specifici, ad esempio nel caso di passare i parametri fino a un altro API che esegue il lavoro.

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
    }
}

Vedere anche

Riferimenti

Spazio dei nomi Microsoft.VisualStudio.Data.Core