【发布时间】:2010-09-09 19:05:03
【问题描述】:
我有一个基于 Prism (v4 ctp) 和 MEF 的应用程序。 该应用程序具有服务 IService1。我希望这个服务实现是由某个模块导出的(不仅仅是由 MEF 发现的)
public interface IService1 {}
public class Service1Impl: IService1 {}
Service1Impl 没有 ExportAttribute。这是因为我想在我的 Prism 模块中手动创建实现:
[ModuleExport(typeof(SomeModule))]
[PartCreationPolicy(CreationPolicy.Shared)]
public SomeModule: IModule
{
[Export]
public IService1 Service1 {get; private set}
public void Initialize()
{
Service1 = new Service1Impl();
}
}
在其他一些组件中,我想通过 MEF Import 获得 IService1 的实现。 问题是如何在 Prism 调用 Initialize 后告诉 MEF 进行导出(在 SomeModule 中)?
如果我在模块的构造函数中创建服务的实现,那么一切正常,但它与 Prism 的模块初始化过程不一致。 问题是 Prism 在 MEF 的组合完成后初始化模块。 此外,在创建服务实现之前,我需要执行一些复杂的初始化逻辑,并且我不希望它在构造函数中。
那么,我有哪些选择?
【问题讨论】: