実行時にアセンブリ型を動的に読み込み、インスタンス化します
場合によっては、プロジェクトのアセンブリ参照を変更できずに、実行時にオブジェクトをインスタンス化する必要がある場合があります。これは、必要なクラスのアセンブリ名と完全修飾型名しかわかっていない場合に発生します。
メソッド:
この課題を克服するには、.NET のリフレクションおよびアセンブリ読み込みメカニズムを使用して、次の手順を実行できます。
Assembly.LoadFrom
メソッドを使用して、アセンブリをメモリに読み込みます。このメソッドは、アセンブリへの絶対パスが不明な場合でもアセンブリを読み込むことができるため、別のディレクトリに配置されているアセンブリ、またはグローバル アセンブリ キャッシュ (GAC) に読み込まれているアセンブリに適しています。 Type.GetType
メソッドを使用して、読み込まれたアセンブリから型メタデータを取得します。この手順では、パラメータとして完全修飾型名が必要です。 Type
オブジェクトを使用して Activator.CreateInstance
を呼び出し、必要な型をインスタンス化します。 簡略化されたコード例を次に示します:
<code class="language-csharp">Assembly assembly = Assembly.LoadFrom("MyCoolAssembly.dll"); Type myType = assembly.GetType("MyNamespace.MyType"); object myInstance = Activator.CreateInstance(myType);</code>
動的型解決の代替:
アセンブリ ファイル名と型名の両方がある場合は、Activator.CreateInstance(assemblyName, typeName)
メソッドを使用できます。このメソッドを使用すると、.NET は手動で反映することなく自動的に型を解決できます。解析の問題が発生した場合は、try/catch
ブロックを含めて特定のアセンブリ ディレクトリを検索するか、前述の Assembly.LoadFrom
メソッドを使用して手動でロードしてみてください。
これらの手法を使用すると、アセンブリの物理的な場所にアクセスできない場合や、プロジェクト内でアセンブリを直接参照しない場合でも、実行時に型を動的に読み込んでインスタンス化できる柔軟性が得られます。
以上が.NET でアセンブリ名から型を動的にロードしてインスタンス化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。