1

MEF を使用して個々のアドインを読み込もうとしています。私のシナリオは次のとおりです。アプリケーションが起動すると、一連のアドインが検索され、アプリに読み込まれます。

この起動段階の後、ユーザーが選択したアドインをロードできるようにしたいと考えています。これは私が本当に苦労しているビットです。

私の初期読み込みコードは次のとおりです。

    var compositionContainer = new CompositionContainer();

    var assemblyCatalog = new AssemblyCatalog(@"C:\MyPath\Experiment.dll");

    .. catalogs for other addins..
    var aggregateCatalog = new AggregateCatalog(assemblyCatalog);

    CompositionContainer container = new CompositionContainer(aggregateCatalog);
    container.ComposeParts(this);

    foreach (var addin in addins)
    {
        addin.OnLoad(this);
    }

新しいアドインを既存のコンテナーのカタログに追加できるはずですが、追加する方法が見つかりません。以下は機能しません。

var assemblyCatalog = new AssemblyCatalog(filePath);
var catalog = this.compositionContainer.Catalog as AggregateCatalog;
catalog.Catalogs.Add(assemblyCatalog);
this.compositionContainer.ComposeParts(this);

filePathの dll にあるアドインをロードするにはどうすればよいですか。さらに、既に読み込まれているアドインでは呼び出さずに、その新しいアドインで .OnLoad メソッドを呼び出す方法はありますか?

4

1 に答える 1

1

あなたが探しているものはすでにPrism ライブラリに実装されているように思えます。具体的には、モジュール性のドキュメントとデモをご覧ください。

Prism はアドイン (Prism 用語ではモジュール) を管理でき、それらをすぐに、または必要に応じてロードできます。モジュールがロードされると、そのInitializeメソッド (インターフェイスを介してすべてのモジュールによって実装されるIModule) が呼び出されるため、冗長な初期化呼び出しはありません。

また、Prism はそのままで MEF をサポートしていることにも言及する必要があります。

于 2013-08-27T21:02:31.993 に答える