0

特定のAppDomainをロードしましたが、そこからいくつかのタイプを動的にロードしたいと思います(ケーキの一部ですよね?)。問題は、AppDomainクラスのすべてのCreateInstanceメソッドがリモーティングオブジェクトハンドルとして物事を返すことです。リモーティングプロキシには、シリアライズ可能な具象クラスが必要である、LifeTimeServiceが使用されていない限り、ガベージコレクションを熱心に行うなど、避けたい制限があります。

私の質問は、リモーティングプロキシにラップせずに、別のアプリドメインにタイプをロードするにはどうすればよいですか?以下は私のコードの抜粋です。

AppDomainSetup ads = new AppDomainSetup();
ads.ApplicationBase = Path.GetDirectoryName(_bllAssemblyPath);
ads.PrivateBinPath =  Path.GetDirectoryName(_bllAssemblyPath);
if (File.Exists(_bllAssemblyPath + ".config"))
    ads.ConfigurationFile = _bllAssemblyPath + ".config";
_workerSpace= AppDomain.CreateDomain("worker", new System.Security.Policy.Evidence(AppDomain.CurrentDomain.Evidence), ads );

_bllQueue = _workerSpace.CreateInstanceFrom(_bllAssemblyPath, queueType) as IThumbCapQueue;
4

2 に答える 2

1

.NET では別のアプリ ドメイン内のオブジェクトのメモリに直接アクセスできないため、アプリ ドメイン間で通信するには何らかの種類のプロキシが常に必要になります。また、例の両方の AppDomains が同じ Windows プロセス内で実行されることに注意してください。

リモート処理のための新しいインフラストラクチャがあります。必要な機能を提供するRIA サービスです。

于 2010-07-27T23:27:59.140 に答える
0

関心のあるオブジェクトをリモート可能にする代わりに、リモート AppDomain への通信チャネルとして機能するリモート可能な「ブートストラップ」を作成し、それを使用して関心のあるものをロードします。私はこれをプロジェクトで行っていますそれらから型情報を取得するには、任意の .NET dll をリフレクトする必要があります (完了したら、アセンブリをアンロードしてファイルがロックされないようにするため、新しい AppDomain で行います) - リモーティング シムはアセンブリをロードし、リフレクションを実行し、収集します必要な情報を取得し、シリアル化可能なオブジェクトの形式で呼び出し元の AppDomain に送り返します。ここを参照してください。

于 2010-07-27T23:29:00.563 に答える