ベスト プラクティス: アセンブリを動的に読み込み、クラスをインスタンス化し、メソッドを実行します
動的プログラミングでは、多くの場合、アセンブリをロードし、クラスをインスタンス化し、そのメソッドを呼び出す必要があります。この記事では効率的で安全な実装方法を紹介します。
アセンブリの動的な読み込みは、アセンブリ ファイルへのパスをパラメーターとして受け取る Assembly.LoadFile
メソッドを使用して実行できます。アセンブリが読み込まれると、その型、メソッド、その他の詳細を取得できます。
クラスをインスタンス化し、そのメソッドを呼び出す方法はたくさんあります。ただし、動的に読み込まれるアセンブリの場合、リフレクションを使用することには利点があります。リフレクションを使用すると、実行時に型のメンバーにアクセスして呼び出すことができます。
伝統的な方法:
次のコードは、インスタンス化されたオブジェクトを必要なインターフェイスにキャストする従来の方法を示しています。
<code class="language-csharp">Assembly assembly = Assembly.LoadFile(@"C:\dyn.dll"); IRunnable r = assembly.CreateInstance("TestRunner") as IRunnable; if (r == null) throw new Exception("broke"); r.Run();</code>
推奨される方法: AppDomain を使用します:
より安全で柔軟なアプローチは、最初にアセンブリを独自の AppDomain に読み込むことです。これにより、分離と制御が向上します。前のコードを次のコードに置き換えます:
<code class="language-csharp">var domain = AppDomain.CreateDomain("NewDomainName"); var type = typeof(IRunnable); var runnable = domain.CreateInstanceFromAndUnwrap(@"C:\dyn.dll", type.Name) as IRunnable; if (runnable == null) throw new Exception("broke"); runnable.Run();</code>
メソッドを使用してアンインストールできます。これはリソース管理に役立ち、メモリ リークを回避します。 AppDomain.Unload
以上が動的にロードされたアセンブリからクラスを安全にロード、インスタンス化、実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。