Isso pode estar relacionado a Pass ILogger ou ILoggerFactory para construtores no AspNet Core? , entretanto, trata-se especificamente do Design da Biblioteca , não de como o aplicativo real que usa essas bibliotecas implementa seu registro.
Estou escrevendo uma biblioteca .net Standard 2.0 que será instalada via Nuget e para permitir que as pessoas que usam essa biblioteca obtenham algumas informações de depuração, estou dependendo do Microsoft.Extensions.Logging.Abstractions para permitir que um Logger padronizado seja injetado.
No entanto, estou vendo várias interfaces e o código de amostra na web às vezes usa ILoggerFactory
e cria um logger no ctor da classe. Há também o ILoggerProvider
que parece uma versão somente leitura do Factory, mas as implementações podem ou não implementar ambas as interfaces, então eu teria que escolher. (Factory parece mais comum que Provider).
Alguns códigos que eu vi usam a ILogger
interface não genérica e podem até compartilhar uma instância do mesmo registrador, e alguns pegam um ILogger<T>
em seu ctor e esperam que o contêiner de DI suporte tipos genéricos abertos ou registro explícito de cada ILogger<T>
variação minha biblioteca usa.
No momento, eu realmente acho que ILogger<T>
é a abordagem certa, e talvez um ctor que não aceita esse argumento e apenas passa um Logger Nulo. Dessa forma, se nenhum registro for necessário, nenhum será usado. No entanto, alguns contêineres de DI escolhem o maior ctor e, portanto, falhariam de qualquer maneira.
Estou curioso para saber o que devo fazer aqui para criar o mínimo de dor de cabeça para os usuários e, ao mesmo tempo, permitir o suporte de registro adequado, se desejado.