如何使用MEF将logger实例注入具有ILogger类型属性的每个类

时间:2010-03-10 20:52:41

标签: c# mef

是否可以使用MEF将记录器的实例注入到具有ILogger类型属性的每个类。有没有其他解决方案可以单独组成每个类的类型。我尝试查找批处理组合,但看起来非常繁琐,因为需要记录器实例的每个类都需要批量组合。还有其他好的解决方案吗? 提前谢谢。

1 个答案:

答案 0 :(得分:4)

通常,在MEF中,您允许MEF进行对象构造,这将允许它自动组合对象,并自动使用[Import]标签设置ILogger属性。

话虽如此,这并不总是适用于所有情况。如果您不能让MEF构造您的对象,因为它们是从单独的源生成的,那么还有其他选项。

例如,这个常见问题出现在WPF和Silverlight中。当您使用这些技术时,您经常希望允许XAML解析器构造您的对象,但在这种情况下,它们永远不会被合成。

Silverlight 4正在添加CompositionInitializer类来处理这种情况。这允许你做的只是将它添加到你的构造函数:

public MyClass() // MyClass Constructor
{
    CompositionInitializer.SatisfyImports(this);
}

CompositionInitializer将使用名为CompositionHost的静态类中定义的目录来组成构造的对象。在你的情况下,这听起来似乎是一个不错的选择......

目前,还没有“官方”桌面版本。格伦·布洛克向他的SkyDrive发布了older port of this for desktop usage(名为PartInitializer,这是旧名称),效果相当不错。将当前的SL版本移植到桌面应用程序中非常容易,但这需要手动移植。

话虽如此,有人说(在推特和其他地方),桌面使用的CompositionInitializer将很快被添加到MEF codeplex网站......