依赖注入和命名记录器
我有兴趣了解有关人们如何使用依赖项注入平台注入日志的更多信息。尽管下面的链接和我的示例引用了log4net和Unity,但我不一定要使用这两个。对于依赖项注入/ IOC,我可能会使用MEF,因为这是其余项目(大型)正在建立的标准。 我对依赖关系注入/ ioc非常陌生,对C#和.NET也很陌生(在VC6和VB6大约十年后,在C#/。NET中很少编写生产代码)。我对现有的各种日志记录解决方案进行了很多调查,因此我认为我对它们的功能集有很好的了解。我只是对注入一个依赖项的实际机制还不够熟悉(或者,也许更“正确”地,是获取一个依赖项的抽象版本)。 我看过其他与日志记录和/或依赖注入相关的帖子,例如: 依赖注入和日志记录接口 记录最佳做法 Log4Net Wrapper类是什么样的? 再次关于log4net和Unity IOC配置 我的问题与“如何使用IOC工具yyy注入xxx日志记录平台”无关。而是,我对人们如何处理包装日志记录平台(通常但不总是建议)和配置(即app.config)感兴趣。例如,以log4net为例,我可以配置(在app.config中)许多记录器,然后以使用如下代码的标准方式获取这些记录器(不依赖注入): private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 另外,如果我的记录器不是以类命名,而是以功能区域命名,则可以这样做: private static readonly ILog logger = LogManager.GetLogger("Login"); private static readonly ILog logger = LogManager.GetLogger("Query"); private static readonly ILog logger = LogManager.GetLogger("Report"); 因此,我想我的“要求”将是这样的: 我想将我的产品的来源与对日志记录平台的直接依赖相隔离。 我希望能够通过某种依赖注入(可能是MEF)直接或间接解析特定的命名记录器实例(可能在同一命名实例的所有请求者之间共享同一实例)。 我不知道这是否很难,但是我希望能够按需获取命名记录器(与类记录器不同)。例如,我可能会基于类名称为我的类创建一个记录器,但是一种方法需要特别繁重的诊断,而我想单独进行控制。换句话说,我可能希望单个类“依赖”两个单独的记录器实例。 让我们从数字1开始。我已经阅读了很多文章,主要是关于stackoverflow的,关于包装是否是个好主意。请参阅上面的“最佳实践”链接,并转到jeffrey hantin的注释中,以获取有关包装log4net的原因的观点。如果您进行了包裹(如果可以有效包裹),您是否将包裹严格地用于注射/去除直接依赖?还是您还会尝试抽象出部分或全部log4net app.config信息? 假设我要使用System.Diagnostics,可能要实现一个基于接口的记录器(甚至使用“通用的” ILogger …