Prism / MEF - 我的应用程序运行后,如何在以后添加到我的AggregateCatalog?

时间:2011-03-08 21:09:40

标签: dependency-injection prism mef catalog

基本上,我有以下情况:

  1. 用户运行应用程序
  2. Bootstrapper将“Modules”目录加载到AggregateCatalog中。
  3. 我的导航菜单已构建
  4. 用户点击刷新
  5. 该应用程序下载一个新模块并将其复制到Module目录中。
  6. 我不知何故需要能够将新模块添加到我的AggregateCatalog并更新我的导航菜单。我认为“AllowRecomposition”是必要的,但是如何在我的应用程序运行后将新程序集添加到我的AggregateCatalog中?

1 个答案:

答案 0 :(得分:1)

如果您导入AggregateCatalog,则可以从ViewModel中(或者您要添加到其中的任何其他位置)访问它。

[Import()]
private AggregateCatalog _aggregateCatalog;

...

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

<小时/> 注意:如果程序集会影响任何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,因此请确保您的应用程序没有问题。