Injetor simples: registre o ILogger <T> usando ILoggerFactory.CreateLogger <T> ()
Estou trabalhando com um projeto que utiliza o Simple Injector como injetor de dependência. Por outro lado, este projeto usa Microsoft.Extensions.Logging para registrar os eventos que ocorrem em determinadas classes.
Meu problema técnico é bem simples de explicar. Quero registrar no meu DI o ILogger independentemente da classe T que está sendo chamada, masEU PRECISO fazer isso do meuILoggerFactory.CreateLogger<T>()
método porque isso obtém a configuração do criador de logs usandoMicrosoft.Extensions.Configuration
.
Eu preciso usar algo parecido com isto para instância meu logger:
private Microsoft.Extensions.Logging.ILogger CreateLogger<T>()
{
var factory = this.ResolveService<ILoggerFactory>();
var logger = factory.CreateLogger<T>();
return logger;
}
Eu poderia conseguir a injeção fazendo:
Container.Register(typeof(ILogger<>), typeof(Logger<>));
E isso nos permite resolver algo como:
public class SomeApiController : ApiController
{
public SomeApiController(ILogger<SomeApiController> logger)
{
//logger is well instantiated, but doesn't got the configuration
logger.LogInformation("test log.");
}
}
Mas como eu disse, isso acontece sem passar pela configuração obtida doMicrosoft.Extensions.Logging.ILoggerFactory
classe, então isso não é útil.
Existe uma maneira de se registrarILogger<T>
usando meuCreateLogger<T>
?