AutoFac を使用するレガシー プロジェクトを更新しており、Simple Logging Facade (SLF) で NLog を使用したい
過去にこれを Ninject で使用したことがありますが、セットアップは非常に簡単です。次のようにするだけです。
kernel.Bind<ILogger>().ToMethod(x => LoggerFactory.GetLogger(x.Request.Target.Member.ReflectedType));
出力は次のようになります。
NLogNinjectSlf.Services.MyService 2013-12-30 15:21:10.5782 注入されたロガーからの DEBUG ログ
簡単なケーキ
しかし、AutoFac を使用する必要があり、ロガーが必要なターゲット タイプを取得する方法がわかりません。
たとえば、次のインターフェイス/クラスがあるとします。
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を使用していますが、主な問題を解決するために実際には必要ありません...