Compartir a través de


IVsDataSupportObject<T> (Interfaz)

Representa un objeto creado en función de la información de referencia proporcionada en una secuencia XML de soporte de los datos.

Espacio de nombres:  Microsoft.VisualStudio.Data.Core
Ensamblado:  Microsoft.VisualStudio.Data.Core (en Microsoft.VisualStudio.Data.Core.dll)

Sintaxis

'Declaración
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 no admite el uso de métodos ni tipos genéricos.

Parámetros de tipo

  • T
    Tipo del parámetro.

El tipo IVsDataSupportObject<T> expone los siguientes miembros.

Métodos

  Nombre Descripción
Método público Invoke Invoca un método en el objeto con los parámetros adicionales no presentes en la signatura del método.

Arriba

Comentarios

La arquitectura de DDEX es principalmente datos controlado para las áreas complejas de extensibilidad, como la representación del origen de datos como modelo de objetos o en una vista jerárquica.Para ello, se han realizado en una entidad admiten cuyo propósito es devolver una secuencia XML que coincide con un esquema conocido al llamador.El llamador después interpreta este XML y se utiliza para controlar esa área de extensibilidad.

Como parte de este enfoque, la secuencia XML suele contener referencias a código en forma de nombres del tipo administrado.El consumidor de la secuencia XML utiliza el método de GetType para resolver estos nombres en tipos reales, y crea instancias de estos tipos según corresponda.El esquema XML que rodea a la referencia de tipo incluye a un conjunto de parámetros que se pueden pasar a una instancia, lo que usan el mismo tipo en circunstancias.

Un ejemplo de esto es en la práctica la entidad de compatibilidad de IVsDataObjectSelector .Haga referencia a esta entidad de soporte de las partes de la secuencia XML de soporte del objeto de datos que especifican información sobre los tipos de objeto de origen de datos, como tablas o procedimientos almacenados.Sería posible escribir una implementación del selector que utiliza un único parámetro que indica el identificador subyacente del tipo de objeto a recuperar y, a continuación de XML de soporte de objeto el valor correcto para este parámetro en referencia selector para cada uno de los tipos.

El propósito de esta interfaz es habilitar el paso de estos parámetros a los métodos de una entidad admiten sin tener que agregar métodos adicionales o parámetros para habilitar este escenario con parámetros.Esto se hace utilizando un enfoque tarde- enlazado de llamada a método que sea controlado correctamente en la implementación del proveedor.La interfaz define un método de Invoke al que el llamador pasa el nombre de método para invocar, el conjunto de archivo de argumentos, y un conjunto de parámetros especializar el comportamiento del método.El formato de los parámetros depende del llamador.Por ejemplo, es el esquema XML de compatibilidad del objeto de datos a definir cómo especificar parámetros en XML y cómo estos parámetros traducción a la matriz de parámetros pasados a la implementación.

Ejemplos

El código siguiente muestra un ejemplo de compatibilidad XML del objeto de datos que define la información sobre dos tipos de objeto de datos, incluidas las referencias al tipo único que implementa un servicio de DSRefBuilder para estos tipos.Después de esto se codifica mediante la implementación de la interfaz de IDSRefBuilder como un objeto de compatibilidad de los datos.XML pasa diferentes parámetros para cada tipo, y las presentaciones de la implementación del selector la selección de dos rutas de acceso del código diferentes, dependiendo de los parámetros.Observe que en un caso más típico, los valores de parámetro se utiliza en un modo más genérico de modo que el código no es consciente de valores específicos, como en el caso de pasar parámetros abajo a otro API que haga el trabajo.

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

Vea también

Referencia

Microsoft.VisualStudio.Data.Core (Espacio de nombres)