基本上,我有以下情况:
我不知何故需要能够将新模块添加到我的AggregateCatalog并更新我的导航菜单。我认为“AllowRecomposition”是必要的,但是如何在我的应用程序运行后将新程序集添加到我的AggregateCatalog中?
答案 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
,因此请确保您的应用程序没有问题。