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 を解釈し、その機能拡張領域を制御するために使用します。
この方法の一部として、XML ストリームは、マネージ型の名前の形式でコードで説明が含まれます。 XML ストリームのコンシューマーは実際の型にこれらの名前を解決するには GetType のメソッドを使用し、次に応じて、型のインスタンスを作成します。 型参照を囲む XML スキーマは、インスタンスに渡す可能性があるパラメーター セットを含みます。複数の条件下で使用されるように同じ型ができます。
このの 1 例は、実際に IVsDataObjectSelector のサポートのエンティティです。 このサポートのエンティティはテーブルやストアド プロシージャなどのデータ ソースのオブジェクトの種類についての情報を指定するデータ オブジェクトのサポートの XML ストリームの一部から参照されます。 取得するオブジェクトの型の基になる識別子を示す一つのパラメーターを使用して、そのオブジェクトのサポートの XML に各型のセレクターの参照の下でこのパラメーターに適した値を含める]セレクターの実装を記述することはできます。
このインターフェイスの目的は、このパラメーター化されたシナリオを有効にするための追加メソッドまたはパラメーターを追加せずにサポートのエンティティのメソッドにこれらのパラメーターの渡し方を有効にします。 これは、プロバイダーの実装によって適切に処理される遅延バインディング メソッド呼び出しの手法を使用してされます。 インターフェイスは、呼び出し元が呼び出すメソッドの名前を渡します Invoke の単一のメソッド引数の標準セット、およびの各メソッドの動作を特化するパラメーター セットを定義します。 パラメーターのファイル形式は呼び出し元によって異なります。 のこれらのパラメーターが実装に渡されたパラメーター オブジェクトの配列に変換するか XML でパラメーターの入力方法をたとえば、定義するデータ オブジェクトのサポートの XML スキーマがあります。
例
次のコードは、2 種類のオブジェクトの種類についての情報を定義するこれらの種類の DSRefBuilder サービスを実装する単一の型への参照を含むデータ オブジェクトのサポートに関する XML の例を示します。 この後 IDSRefBuilder のインターフェイスを実装するコードは、データのサポートのオブジェクトです。 XML では、種類ごとに異なるパラメーターを渡し、セレクターの実装は、パラメーターによって 2 種類のコード パスのオプションを示します。 コードが特定の値を認識しないように、より一般的なケースの場合も、パラメーター値は使用されません。別の 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
}
}