我正在更新一个使用 AutoFac 的遗留项目,并且我想将 NLog 与简单日志记录外观 (SLF) 一起使用
我过去曾在 Ninject 中使用过它,而且它很容易设置,我只需要执行以下操作:
kernel.Bind<ILogger>().ToMethod(x => LoggerFactory.GetLogger(x.Request.Target.Member.ReflectedType));
输出将类似于:
NLogNinjectSlf.Services.MyService 2013-12-30 15:21:10.5782 来自注入记录器的调试日志
小菜一碟
但是现在我必须使用 AutoFac 并且我不知道如何获取需要记录器的Target 类型
例如,如果我有以下接口/类:
public interface IMyService
{
void DoSomething();
}
public class MyService : IMyService
{
private readonly ILogger _logger;
public MyService(ILogger logger)
{
_logger = logger;
}
public void DoSomething()
{
_logger.Debug("Log from injected Logger");
}
}
我希望能够获取类的类型MyService
以将其用作我的记录器的名称
在 AutoFac 中,这是我迄今为止尝试过的:
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterType<MyService>().As<IMyService>();
containerBuilder.Register(x =>
{
// TODO: Get the correct type
return LoggerFactory.GetLogger(x.GetType());
}).As<ILogger>();
顺便说一句:我在 SLF4Net 后面使用 NLog 并不是真正需要解决主要问题......