我现在很困惑,也许不明白真正的问题。
我有一个需要记录器实例来记录错误数据的对象。
例如
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;
.....
}