用MEF和GuyWire注入ILog

时间:2011-02-13 20:52:53

标签: c# .net dependency-injection mef

在学习使用DI工具进行爬行时,我希望有人可以帮助我将一些概念应用于相对简单的场景:

* Log4NetLogger : ILogger  
* DebugLogger : ILogger  
* NullLogger  : ILogger (no output: saves time & noise)  

当我的应用程序运行时,我希望ILog成为Log4NetLogger,并且在进行单元测试时,我希望它是DebugLogger或NullLogger。

我一直在查看使用WindsorInstallers的GuyWire实现that I like。不偏向于任何其他DI工具并理解安装程序的概念,如果不是很多细微差别,Windsor似乎与任何其他容器一样好。

那么,我是否有一个ProductionLoggingInstaller连接Log4Net和TestLoggingInstaller呢?如何将测试切换为DebugLogger或NullLogger?

然后有MEF,我现在已经足够认为它既可以解决这个'问题',也不确定是否没有任何容器或者除了包含之外。

那么你如何应用GuyWire,Windsor和/或MEF的某些组合来解决这里的日志记录解决方案呢?

干杯,
Berryl

注意:我专门使用此日志记录方案应用一些依赖注入工具(即MEF,Windsor,GuyWire等),而不是特定日志工具的app.config

2 个答案:

答案 0 :(得分:0)

您可以通过更改te 配置部分来解决生产和测试中的不同行为。任何基于良好的记录器都应该提供一套完整的appender(甚至是空的appender)并让IoC负责选择引擎,而不是引擎本身的配置方式。

答案 1 :(得分:0)

看一下Common Log(http://netcommon.sourceforge.net/docs/1.2.0/reference/html/logging.html)。它允许您编写一个接口,然后通过配置文件更改记录器。