共用方式為


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 方法解決這些名稱輸入實際型別,然後建立這些型別的執行個體或 null 參考。圍繞型別參考的 XML 結構描述通常會包含可能會傳遞至執行個體的一組參數,可讓相同型別在大部分的情況下使用。

這個範例實際上是 IVsDataObjectSelector 支援實體。這項支援實體從指定與資料來源物件型別的資訊,例如資料表或預存程序資料物件支援 XML 資料流部分參考。撰寫使用表示物件的型別基礎識別項的單一參數擷取的選取器實作,就可以在物件支援 XML 然後將這個參數的正確值在每個型別的選取器參考下方。

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

範例

下列程式碼會顯示定義與這兩個物件型別資料物件支援的 XML 範例,包括對實作這些型別的 DSRefBuilder 服務唯一型別參考。接下來是實作 IDSRefBuilder 介面的程式碼,資料還是可以支援物件。XML 傳遞每個型別的不同參數,因此,選取器實作會根據參數顯示兩個不同程式碼路徑的選取範圍。請注意,在更常見的情況下,參數值用於較一般的方式,讓程式碼並不知道特定的值,例如在傳回參數的情況下要完成之工作的其他 API。

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 命名空間