Registrando o NLog ILogger com o Injetor Simples
Existe alguma maneira de obter o contexto para recuperar ologgerName
E useLogManager.GetLogger(loggerName)
ao invés deLogManager.GetCurrentClassLogger()
?
Percebicontainer.RegisterConditional()
tem acesso ao contexto.
Além disso, quero evitar soluções comoSimpleLogging.NLog para agora.
Por fim, estou disposto a aceitar que essa não é a abordagem correta. BTW, AOP é uma opção que eu já explorei (É uma boa prática ter o logger como um singleton?)
Nota: Estou ciente de queGetCurrentClassLogger()
obtém as mesmas informações que eu recuperaria com a reflexão do .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!");
}
}
}
}