首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单注入器寄存器LibLog

简单注入器寄存器LibLog
EN

Stack Overflow用户
提问于 2017-08-26 07:30:09
回答 1查看 551关注 0票数 1

我正在使用优秀的LibLog代码来抽象我的应用程序中的记录器实现。

我还使用Simple Injector作为DI容器。

我想在我的类中注入一个logger实例,它对应于下面的静态创建

代码语言:javascript
复制
private readonly ILog logger = LogProvider.For<MyClass>()

或者如果您喜欢静态方法

代码语言:javascript
复制
private readonly ILog logger = LogProvider.GetCurrentClassLogger()

这样做对吗?

代码语言:javascript
复制
container.Register<ILog>(() => LogProvider.GetCurrentClassLogger(), Lifestyle.Singleton);

还是有更好的方法?

编辑:

代码语言:javascript
复制
  <package id="SimpleInjector" version="4.0.8" targetFramework="net461" />
  <package id="SimpleInjector.Packaging" version="4.0.8" targetFramework="net461" />
EN

回答 1

Stack Overflow用户

发布于 2017-08-26 15:54:48

注册LogLib是如何使用简单注入器register log4netregister nlog的基础,文档也解释了这一点,here

您需要对ILog进行有条件的注册,步骤如下:

代码语言:javascript
复制
container.RegisterConditional(typeof(ILog), 
    context => typeof(LibLogLog<>).MakeGenericType(context.Consumer.ImplementationType), 
    Lifestyle.Singleton, 
    context => true);

LibLogLog<T>是将调用转发给LogProvider.For<T>()的泛型类

代码语言:javascript
复制
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>代理变得微不足道。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45890559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档