loggerName
を取得してLogManager.GetCurrentClassLogger()
の代わりにLogManager.GetLogger(loggerName)
を使用できるように、コンテキストを取得する方法はありますか?シンプルなインジェクターでNLog ILoggerを登録する
私は気づいたcontainer.RegisterConditional()
コンテキストにアクセスできます。
また、私は今のところSimpleLogging.NLogのような解決策を避けたいと思います。
最後に、私はこれを受け入れることを望んでいますが、正しいアプローチではありません。ところで、AOPは私がすでに検討しているオプションです(Is it a good practice to have logger as a singleton?)。
注:私はGetCurrentClassLogger()
が.NETリフレクションで取得したのと同じ情報を取得することに気付いています。
using NLog;
using SimpleInjector;
namespace DependencyInjection
{
class Program
{
private static Container _container;
static void Main(string[] args)
{
Bootstrap();
_container.GetInstance<Greeter>().Greet();
}
private static void Bootstrap()
{
_container = new Container();
_container.Register<ILogger>(() => LogManager.GetCurrentClassLogger(), Lifestyle.Transient);
_container.Register<Greeter>();
_container.Verify();
}
public class Greeter
{
private ILogger _logger;
public Greeter(ILogger logger)
{
_logger = logger;
}
public void Greet()
{
_logger.Log(LogLevel.Info, "Hello world!");
}
}
}
}
あなたは 'loggerName'の値をどのようにしたいですか? – qujck
関連:https://stackoverflow.com/q/32952701/264697 – Steven
AOP技術を適用することは非常に便利ですが、コード織りツールから離れて滞在してください。デコレータを使用してAOPを適用します。関連:https://stackoverflow.com/a/9915056/264697 – Steven