更新 : 2007 年 11 月
このサンプルでは、要求した型を格納したアセンブリを返すイベント ハンドラを提供することで、ホストを型解決プロセスに参加させる方法の例を示します。これは高度な技術で、多くの場合、分散アプリケーションで柔軟性やフォールト トレランス機能を高めるために使用します。
このサンプルの使用については、次のトピックを参照してください。
コマンド プロンプトを使用してサンプルをビルドするには
コマンド プロンプト ウィンドウを開き、サンプルの使用言語に対応するサブディレクトリに移動します。
使用するプログラミング言語に応じて、コマンド ラインで「msbuild DynamicTypeResolveCS.sln」または「msbuild DynamicTypeResolveVB.sln」と入力します。
Visual Studio を使用してサンプルをビルドするには
Windows エクスプローラを開き、このサンプルの使用言語に対応するサブディレクトリに移動します。
使用するプログラミング言語に応じて DynamicTypeResolveCS.sln のアイコンまたは DynamicTypeResolveVB.sln のアイコンをダブルクリックして、そのファイルを Visual Studio で開きます。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
サンプルを実行するには
コマンド プロンプト ウィンドウを開き、ビルドした実行可能ファイルが格納されているディレクトリに移動します。
コマンド ラインで「DynamicTypeResolve.exe」と入力します。
メモ : |
|---|
このサンプルでは、コンソール アプリケーションをビルドします。出力を表示するには、これをコマンド プロンプト ウィンドウで実行する必要があります。 |
解説
このサンプルでは、既存ではない型のインスタンス化を試みます。ただし、型読み込みエラーも処理し、必要な型を動的に作成して、FileNotFoundException を防ぎます。
このサンプルでは、次の技術およびクラスを使用します。
リフレクション
AppDomain このクラスの AssemblyResolve イベントは、型の読み込みがエラーになった場合に呼び出されるイベント ハンドラを追加するために使用します。
Activator コンパイル時に名前が既知とは限らない型のインスタンスを作成するために使用します。
MethodInfo コンパイル時に名前が既知とは限らない型のメソッドを呼び出すために使用します。
AssemblyBuilder 実行時に動的アセンブリを生成するために使用します。
AssemblyName アセンブリの一意の ID を定義するために使用します。このサンプルでは、この型を単純に使用して、動的アセンブリにテキストの名前を指定します。
ModuleBuilder 動的アセンブリで動的モジュールをビルドするために使用します。
TypeBuilder これは Type の派生型で、型を動的にビルドするために使用します。ここから、FieldBuilder、ConstructorBuilder、および MethodBuilder の各型のインスタンスを要求できます。このサンプルでは、これらの型を使用して完全な型を生成します。
MethodBuilder 動的型でメソッドを定義するために使用します。
ILGeneratorMethodBuilder 型は GetILGenerator メソッドを実装し、このメソッドは ILGenerator 型のインスタンスを返します。この型は、Microsoft Intermediate Language (MSIL) コードを動的に生成するために使用します。
デリゲートとイベント
- ResolveEventHandler 型を解決できなかった場合に呼び出されるコールバック メソッドを示すために使用します。
メモ :