Регистрация NLog ILogger с помощью простого инжектора
Есть ли способ получить контекст, чтобы я мог получитьloggerName
и использоватьLogManager.GetLogger(loggerName)
вместоLogManager.GetCurrentClassLogger()
?
Я заметилcontainer.RegisterConditional()
имеет доступ к контексту.
Кроме того, я хочу избежать таких решений, какSimpleLogging.NLog теперь.
Наконец, я готов признать, что это не правильный подход. Кстати, АОП это вариант, который я уже исследовал (Является ли хорошей практикой иметь регистратор как синглтон?).
Примечание: я знаю, что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!");
}
}
}
}