.net - 如何在没有导出属性的情况下在 MEF 中导出类型? (例如以编程方式)

标签 .net mef

我似乎找不到任何关于如何执行此操作的文章或链接,这似乎是一个明显的问题(例如,当您没有源代码或想要使用不是为 MEF 编写的现有类型时)

最佳答案

如果您希望将现有对象实例添加到您的容器中,您可以使用 CompositionContainer.ComposeExportedValue 方法:

container.ComposeExportedValue<MyClass>(myClassInstance);

不过,您真正要寻找的可能是新的基于约定的编程模型,它允许您根据命名约定而不是属性创建部件,但此功能仅在 .NET 4.5 中可用。

用法示例(这将导出 myAssembly 中的每个类型,它实现 IController 作为 IController ):
var registration = new RegistrationBuilder();

registration.ForTypesDerivedFrom<IController>()
            .Export<IController>();

var catalog = new AssemblyCatalog(myAssembly, registration);
var container = new CompositionContainer(catalog);

如何使用 MEF 的新约定模型的一个很好的例子 can be found here .

希望这可以帮助。

关于.net - 如何在没有导出属性的情况下在 MEF 中导出类型? (例如以编程方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13433463/

相关文章:

.net - 以编程方式从现有程序集中删除自定义属性

.net - MEF 在其他组件中找不到零件

c# - 获取对象处置/销毁的通知

c# - TDD 模拟 validate.ValidateAsync 方法

c# - MEF 从预先存在的属性中导出

.net - 我可以使用 MEF 从 GAC 中的程序集中发现零件吗?

c# - 测试依赖 MEF 注入(inject)的非导出类

c# - MEF 最佳实践 : Where in the application I create container and where to call Compose()?

.net - Linq to Entities 查询*总是*访问数据库吗?

c# - 如何拦截 TAB 键按下以防止 C# 中的标准焦点更改