共用方式為


IVsDataSupportObject<T> 介面

表示根據資料支援 XML 資料流提供的參考資訊建立的物件。

命名空間:  Microsoft.VisualStudio.Data.Core
組件:  Microsoft.VisualStudio.Data.Core (在 Microsoft.VisualStudio.Data.Core.dll 中)

語法

'宣告
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 不支援泛型型別或方法。

類型參數

  • T
    參數的型別。

IVsDataSupportObject<T> 類型會公開下列成員。

方法

  名稱 描述
公用方法 Invoke 在物件上叫用方法的其他參數不在目前方法簽章。

回頁首

備註

DDEX 結構為擴充性複雜區域是主要資料驅動型,例如代表資料來源做為物件模型或在階層式檢視。 若要達成這個目的,會傳回 XML 資料流符合已知的結構描述至呼叫端的支援實體建立。 然後呼叫端解譯這個 XML 來控制項擴充性該區域。

以 Managed 型別名稱的形式,為這個方法中, XML 資料流通常包含參考到程式碼。 XML 資料流的消費者使用 GetType 方法解決這些名稱的實際型別,然後建立這些型別的執行個體屬性。 圍繞型別參考的 XML 結構描述通常會包含可能傳遞至執行個體的一組參數,可讓相同型別在大部分的情況下使用。

這個範例實際上是 IVsDataObjectSelector 支援實體。 這項支援實體從指定關於資料來源物件型別的資訊,例如資料表或預存程序的資料物件支援 XML 資料流的部分參考。 寫入使用物件的基礎型別識別項的單一參數擷取的選取器實作),然後在物件支援 XML 包含無效的值轉換為這個參數在選取器參考下為每一個型別。

這個介面的目的是要讓可以將這些參數傳遞至支援實體的方法,而不需要將其他方法或參數啟用這個參數化的案例。 這是透過使用由提供者的實作適當地處理的晚期繫結方法呼叫方法。 介面會定義呼叫端透過叫用方法的,其指定為引數和一組參數名稱特製化方法之行為的單一 Invoke 方法。 參數的格式取決於呼叫端。 例如,它是由定義的資料物件支援 XML 結構描述決定項目在 XML 的參數,這些參數將如何轉譯為物件參數傳遞給實作。

範例

下列程式碼顯示定義相關的資料物件型別的資訊的資料物件支援 XML 的範例,包括對實作這些型別的 DSRefBuilder 服務的單一型別的參考。 在這個之後是實作 IDSRefBuilder 介面的程式碼,資料支援物件。 XML 傳遞每個型別的參數,因此,選取器實作以參數顯示兩個不同程式碼路徑的選取範圍。 請注意,在一個更常見的情況下,參數值用來更泛型的方式,讓程式碼不知道特定值,例如在完成工作的傳回參數的情況下對另一個應用程式開發介面。

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

請參閱

參考

Microsoft.VisualStudio.Data.Core 命名空間