我现在很困惑,也许不明白真正的问题。

我有一个需要记录器实例来记录错误数据的对象。

例如

public class CommonFileSaver : IFileSaver
    {
           private static ILog _log = LogManager.GetLogger();

           .....
    }

我想测试日志记录过程。而我目前的决定是使用 ILog 接口(interface)的模拟。

此时我已决定使用 Unity 来解决依赖关系。

所以线
ILog _log = LogManager.GetLogger();

看起来像
ILog _log = Resolver.Instance.Resolve<ILoger>();

问题是如何设置 Unity 容器以使用 LogManager 工厂返回 ILog 对象的新实例。

谢谢你。

附言ILog 是 log4net 接口(interface),现在整个日志记录都是使用 log4net 实现的。

最佳答案

这里的问题是你没有遵循好莱坞原则。静态工厂方法和单例不适合依赖注入(inject)。您应该更改您的代码,以注入(inject)您的 ILog 工厂:

public class CommonFileSaver : IFileSaver
{
   public CommonFileSaver(ILogFactory logFactory)
   {
      _log = logFactory.GetLogger();
   }

   private readonly ILog _log;

   .....
}

10-08 00:08