1

基本的に、次のシナリオがあります。

  1. ユーザーがアプリケーションを実行する
  2. Bootstrapperは、「Modules」ディレクトリをAggregateCatalogにロードします。
  3. ナビゲーションメニューが作成されました
  4. ユーザーが[更新]をクリックします
  5. アプリは新しいモジュールをダウンロードし、それをModuleディレクトリにコピーします。

どういうわけか、新しいモジュールをAggregateCatalogに追加して、ナビゲーションメニューを更新できるようにする必要があります。「AllowRecomposition」が必要だと思いますが、アプリがすでに実行された後、実際に新しいアセンブリをAggregateCatalogに追加するにはどうすればよいですか?

4

1 に答える 1

1

AggregateCatalog をインポートすると、ViewModel 内 (または追加したい他の場所) からアクセスできます。

[Import()]
private AggregateCatalog _aggregateCatalog;

...

private void SomeFunc()
{
    _aggregateCatalog.Catalogs.Add(...);
}


注: Assembly が Import または ImportMany ステートメントに影響を与える場合は、再構成を許可する必要があります。そうしないと、例外が発生します。たとえば、アセンブリに別のIFooServiceエクスポートが含まれている場合...

//Exception Thrown
[ImportMany(typeof(IFooService))]
private IEnumerable<IFooService> _myFooServices;

//No Exception Thrown
[ImportMany(typeof(IFooService), AllowRecomposition = true)]
private IEnumerable<IFooService> _myFooServices;


注:インターフェイスを再度OnImportsSatisfied実装するとトリガーさIPartImportsSatisfiedNotificationれるため、これが原因でアプリケーションに問題がないことを確認してください。

于 2011-03-08T22:01:00.420 に答える