ホームページ > バックエンド開発 > C++ > 動的にロードされたアセンブリからクラスを安全にロード、インスタンス化、実行するにはどうすればよいですか?

動的にロードされたアセンブリからクラスを安全にロード、インスタンス化、実行するにはどうすればよいですか?

DDD
リリース: 2025-01-21 02:23:08
オリジナル
402 人が閲覧しました

How to Safely Load, Instantiate, and Run a Class from a Dynamically Loaded Assembly?

ベスト プラクティス: アセンブリを動的に読み込み、クラスをインスタンス化し、メソッドを実行します

動的プログラミングでは、多くの場合、アセンブリをロードし、クラスをインスタンス化し、そのメソッドを呼び出す必要があります。この記事では効率的で安全な実装方法を紹介します。

アセンブリの読み込み

アセンブリの動的な読み込みは、アセンブリ ファイルへのパスをパラメーターとして受け取る 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

要約すると、AppDomain を使用してアセンブリをロードおよびアンロードすることは、より優れた柔軟性、セキュリティ、強化された分離性を提供するため、推奨されるアプローチです。

以上が動的にロードされたアセンブリからクラスを安全にロード、インスタンス化、実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート