gpt4 book ai didi

.net - MEF:如何为契约(Contract)实现手动配置导出

转载 作者:行者123 更新时间:2023-12-01 10:13:30 25 4
gpt4 key购买 nike

我有一个 MEF 的 CompositionContainer、一个契约(Contract)(比如 IFoo)和一个模块(Prism 模块,但在这里并不重要,只是一些组件)。我想在我的模块中注册合约的实现 (FooImpl)。

如果是 Unity,我会这样做:

unity.RegisterType<IFoo, FooImpl>().

就是这样。对于 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) {}
}

在初始化中,我希望手动导出 FooImpl 作为 IFoo 合约,不依赖于 FooImpl 类上的 ExportAttribute。我知道我可以创建一个 FooImpl 实例(在上面的 MyModule.Initialize 中),但是FooImpl 对其他组件/服务具有构造函数依赖性,我希望它们在创建时得到解决。

所以我可能应该问:如何手动添加具有 CompositionContainer 实例和契约(Contract)的导出?然后以某种方式标记此导出,因为它具有 ImportingConstructorAttribute?

最佳答案

看看AttributedModelServices.ComposeExportedValue .你会像这样使用它:

m_container.ComposeExportedValue<IFoo>(new IFooImpl());

关于.net - MEF:如何为契约(Contract)实现手动配置导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3493640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com