我一直在用DI制作简单的记录器类,但是我有一些问题。
有问题。如果我使用DI进行记录器课程。每当我使用它时,都应该这样使用。
var logger = new LogService(new FileLogger());
logger.WriteLine("message");
我想使其成为静态类,但是无法通过构造函数在静态类中注入依赖项。
所以,我这样更改它。
public static class LogService()
{
private static readonly ILoggable _logger;
static LogService()
{
_logger = new FileLogger();
}
}
我觉得这很奇怪。这不是DI ..
没有一种将依赖项注入静态类的好方法吗?
谢谢。
答案 0 :(得分:0)
下面是一个使用log4net扩展名向Unity DI容器注入UnityLog4NetResolver记录器的示例:
public class A
{
readonly ILog log;
public A(ILog log)
{
this.log = log;
}
...
}
...
var container = new UnityContainer();
container
.AddNewExtension<UnityLog4NetResolver.LogByTypeResolverExtension>();
container.Resolve<A>();
最后一条语句等效于new A(LogManager.GetLogger(typeof(A)))
。因此,每个类都可以有一个由DI容器注入相应名称的记录器。
这个想法来自this package。但是,它似乎已被放弃并且不支持最新的Unity版本。