是否可以使用MEF将记录器实例注入到具有类型为ILogger的属性的每个类中。是否有任何其他解决方案独立构成每个类的类型?我尝试查找批量组合,但对我来说看起来非常繁琐,因为需要记录器实例的每个类都需要在批处理中组成。还有其他什么好的解决方案吗? 在此先感谢。如何使用MEF将记录器实例注入到每个具有ILogger类型属性的类中使用MEF
4
A
回答
4
那么,通常情况下,在MEF中,您允许MEF执行对象构造,这将允许它自动正确地组合对象,并使用[Import]标签自动设置ILogger属性。
这就是说,这并不总是适用于每种情况。如果你不能让MEF构造你的对象,因为它们是从一个单独的源生成的,还有其他选项。
例如,这个常见问题发生在WPF和Silverlight中。当你使用这些技术时,你通常希望允许XAML解析器构造你的对象,但在这种情况下,它们将永远不会组成。
Silverlight 4正在添加CompositionInitializer类来处理这种情况。这是什么让你做的只是添加到您的构造函数:
public MyClass() // MyClass Constructor
{
CompositionInitializer.SatisfyImports(this);
}
而且CompositionInitializer
将使用名为CompositionHost
来组成构造的对象的静态类中定义的目录。这听起来像它可能是一个很好的选择在你的情况,以及...
现在,这是没有一个“官方”桌面版本。 Glenn Block在他的SkyDrive上发布了一张older port of this for desktop usage(名为PartInitializer,这是一个旧名字),效果相当不错。将当前的SL版本移植到桌面应用程序中非常容易,但这需要手动移植。
话虽这么说,有人说(在Twitter和其他地方)是CompositionInitializer桌面使用将被添加到MEF名为CodePlex的网站很快...
相关问题
- 1. 使用MEF,注入一个导入类
- 2. 如何使用MEF在代码中注册类型?
- 3. 在类库中使用MEF
- 4. C#MEF设置属性/属性注入
- 5. MEF:注入类型与对象一起?
- 6. 棱镜 - 如何使用MEF在ViewModel中导入IRegionManager使用MEF
- 7. MEF和同一类的两个实例
- 8. MEF 2,泛型导入与实现类
- 9. MEF导入属性
- 10. 如何使用MEF导入多个实例?
- 11. 向MEF注册实例
- 12. MEF:找到懒惰导入的类型
- 13. 如何使用类库设置mef?
- 14. 如何将现有实例添加到MEF目录?
- 15. 将实例添加到MEF容器
- 16. 使用由MEF组成的参数创建类的实例
- 17. 导入使用MEF
- 18. MEF属性注入不会发生
- 19. 在java中使用CDI注入多个log4j记录器类型
- 20. Views如何使用PRISM和MEF注入到UI中?
- 21. C#使用静态类的MEF
- 22. 如何在Prism4 MEF中创建我的类的实例?
- 23. 何时使用MEF
- 24. MEF导入正在创建每个部分的两个实例
- 25. 如何通过javascript将类型属性注入到所有脚本标记中
- 26. 使用MEF
- 27. 使用MEF
- 28. 使用MEF的线程安全惰性实例化
- 29. MEF导出和导入抽象类型
- 30. 使用MEF的单个.dll
感谢您的信息。我一直在遇到编码DataTemplateSelector的相同问题,并认为我可能不得不恢复到通过静态属性传递需要的特定上下文。这样更清洁。 – 2010-03-10 23:44:07
我想要的是普遍构成应用程序域内的所有导入导出,而不必在每个类中编写依赖关系。这对于MEF是否可行? – TrustyCoder 2010-03-11 19:36:09
@nitroxn:不,不是。导出处理得很好,但对于导入,您必须显式组合对象 - 这提供了一个干净的解决方法,允许对象自行组合,但需要在对象(即导入)的构造函数中添加一行。 – 2010-03-11 19:53:50