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