我正在使用优秀的LibLog代码来抽象我的应用程序中的记录器实现。
我还使用Simple Injector作为DI容器。
我想在我的类中注入一个logger实例,它对应于下面的静态创建
private readonly ILog logger = LogProvider.For<MyClass>()或者如果您喜欢静态方法
private readonly ILog logger = LogProvider.GetCurrentClassLogger()这样做对吗?
container.Register<ILog>(() => LogProvider.GetCurrentClassLogger(), Lifestyle.Singleton);还是有更好的方法?
编辑:
<package id="SimpleInjector" version="4.0.8" targetFramework="net461" />
<package id="SimpleInjector.Packaging" version="4.0.8" targetFramework="net461" />发布于 2017-08-26 15:54:48
注册LogLib是如何使用简单注入器register log4net和register nlog的基础,文档也解释了这一点,here。
您需要对ILog进行有条件的注册,步骤如下:
container.RegisterConditional(typeof(ILog),
context => typeof(LibLogLog<>).MakeGenericType(context.Consumer.ImplementationType),
Lifestyle.Singleton,
context => true);LibLogLog<T>是将调用转发给LogProvider.For<T>()的泛型类
public sealed class LibLogLog<T> : ILog
{
private static readonly ILog logger = LogProvider.For<T>();
public bool Log(LogLevel l, Func<string> f, Exception e, params object[] p) =>
logger.Log(l, f, e, p);
}LibLog实际上是少数几个正确设计了日志接口的日志库之一(即只有一个成员)。这使得实现这个LibLogLog<T>代理变得微不足道。
https://stackoverflow.com/questions/45890559
复制相似问题