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