Простой инжектор: зарегистрируйте ILogger <T> с помощью ILoggerFactory.CreateLogger <T> ()
Я работаю с проектом, который использует Simple Injector в качестве инжектора зависимости. С другой стороны, этот проект использует Microsoft.Extensions.Logging для регистрации событий, которые происходят в определенных классах.
Моя техническая проблема довольно проста для объяснения. Я хочу зарегистрировать в моем DI ILogger независимо от класса T, который вызывается, ноМне НУЖНО сделать это из моегоILoggerFactory.CreateLogger<T>()
метод, потому что это получает конфигурацию регистратора с помощьюMicrosoft.Extensions.Configuration
.
Мне нужно использовать что-то вроде этого, чтобы создать экземпляр моего регистратора:
private Microsoft.Extensions.Logging.ILogger CreateLogger<T>()
{
var factory = this.ResolveService<ILoggerFactory>();
var logger = factory.CreateLogger<T>();
return logger;
}
Я мог бы добиться инъекции, выполнив:
Container.Register(typeof(ILogger<>), typeof(Logger<>));
И это позволяет нам решить что-то вроде:
public class SomeApiController : ApiController
{
public SomeApiController(ILogger<SomeApiController> logger)
{
//logger is well instantiated, but doesn't got the configuration
logger.LogInformation("test log.");
}
}
Но, как я уже сказал, это происходит без прохождения через конфигурацию, полученную изMicrosoft.Extensions.Logging.ILoggerFactory
класс, так что это не полезно.
Есть ли способ зарегистрироватьсяILogger<T>
используя мойCreateLogger<T>
?