我有一个MEF的CompositionContainer,一个契约(比如IFoo)和一个模块(Prism模块,但这里没什么关系,只是一些组件).我希望在我的模块中注册合同的实现(FooImpl).
如果它是Unity我会这样做:
unity.RegisterType<IFoo, FooImpl>().
Run Code Online (Sandbox Code Playgroud)
就这样.有了MEF,我很困惑.我必须使用ExportAttribute标记我的实现,但这会导致它自动导出.我想自己管理这个.看看代码:
class MyModule: IModule {
private CompositionContainer m_container;
public MyModule(CompositionContainer container) {
m_container = container;
}
public void Initialize() {
??? I want something like m_container.CreateExport<IFoo, FooImpl>()
}
}
public interface IFoo {}
public class FooImpl : IFoo {
//[ImportingConstructor]
public FooImpl(ISomeService svc) {}
}
Run Code Online (Sandbox Code Playgroud)
在Initialize中,我希望manualy 导出 FooImpl,因为IFoo合约不依赖于FooImpl类的ExportAttribute.我知道我只能创建一个实例FooImpl(在上面的MyModule.Initialize中),但是FooImpl对其他组件/服务有构造函数依赖关系,我希望它们在创建时得到解析.
所以我可能会问:如何手动添加具有CompositionContainer实例和合同的导出?然后以某种方式标记此导出,因为它具有ImportingConstructorAttribute?
看看AttributedModelServices.ComposeExportedValue.你会像这样使用它:
m_container.ComposeExportedValue<IFoo>(new IFooImpl());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2978 次 |
| 最近记录: |