Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais
Nous recommandons d’utiliser Visual Studio 2017

IVsDataSupportObject<T>, interface

Représente un objet créé selon les informations de référence fournies dans un flux XML de prise en charge de données.

Espace de noms :  Microsoft.VisualStudio.Data.Core
Assembly :  Microsoft.VisualStudio.Data.Core (dans Microsoft.VisualStudio.Data.Core.dll)

public interface IVsDataSupportObject<T>
where T : class

Paramètres de type

T

Type du paramètre.

Le type IVsDataSupportObject<T> expose les membres suivants.

  NomDescription
Méthode publiqueInvokeAppelle une méthode sur l'objet avec des paramètres supplémentaires non présents dans la signature de méthode.
Début

L'architecture de DDEX est principalement des données pilotées pour les zones complexes d'extensibilité, telles que représenter la source de données comme modèle objet ou dans une vue hiérarchique. Pour ce faire, une entité de prise en charge a été créée dont l'objectif est de retourner un flux XML qui correspond à un schéma à l'appelant. L'appelant ensuite interprète ce code XML et l'utilise pour vérifier cette zone d'extensibilité.

Dans le cadre de cette approche, le flux XML contient souvent des références au code sous la forme de noms de type managé. Le consommateur du flux XML utilise la méthode de GetType pour résoudre ces noms dans les types réels, puis crée des instances de ces types à votre convenance. Le schéma XML entourant le type référence est souvent un jeu de paramètres qui peut être passé à une instance, ce qui permet le même type à utiliser dans plusieurs cas.

Un exemple de ce est pratique l'entité de prise en charge d' IVsDataObjectSelector . Cette entité de prise en charge est référencée des parties du flux XML de prise en charge d'objet de données qui spécifient des informations sur les types d'objet source de données, comme les tables ou des procédures stockées. Il est possible d'écrire une implémentation de sélection qui utilise un paramètre unique qui indique l'ID sous-jacent du type d'objet pour récupérer, puis dans la prise en charge XML d'objet incluez la valeur correcte pour ce paramètre dans la référence de sélection pour chaque type.

L'objectif de cette interface est d'activer passer de ces paramètres aux méthodes sur une entité de support sans devoir ajouter des méthodes ou des paramètres supplémentaires pour activer ce scénario paramétrée. Cette opération s'effectue à l'aide d'une approche à liaison tardive d'appel de méthode qui est gérée correctement par l'implémentation du fournisseur. L'interface définit une méthode unique d' Invoke à laquelle l'appelant passe le nom de la méthode pour appeler, son jeu normalisé d'arguments, et un jeu de paramètres pour spécialiser le comportement de la méthode. Le format des paramètres dépend de l'appelant. Par exemple, il appartient au schéma XML de prise en charge d'objet de données à définir comment entrer des paramètres dans XML et comment ces paramètres traduiront en tableau d'objets de paramètres passés à l'implémentation.

Le code suivant illustre un exemple de la prise en charge XML d'objet de données qui définit des informations sur deux types d'objet de données, y compris les références au type unique qui implémente un service d' DSRefBuilder pour ces types. Après cela est le code qui implémente l'interface d' IDSRefBuilder comme des données prennent en charge l'objet. XML passe des paramètres pour chaque type, et l'implémentation de sélecteur illustre la sélection de deux chemins de code différents, selon les paramètres. Notez que dans un cas plus classique, les valeurs de paramètre sera utilisé de plus générique afin que le code ne se rendre pas compte des valeurs spécifiques, par exemple dans le cas de passer des paramètres vers le bas à une autre API qui exécute un travail.

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