¿Esto puede estar algo relacionado con Pass ILogger o ILoggerFactory a los constructores en AspNet Core? , sin embargo, se trata específicamente de Diseño de bibliotecas , no de cómo la aplicación real que usa esas bibliotecas implementa su registro.
Estoy escribiendo una biblioteca .net Standard 2.0 que se instalará a través de Nuget, y para permitir que las personas que usan esa biblioteca obtengan información de depuración, dependo de Microsoft.Extensions.Logging.Abstractions para permitir que se inyecte un registrador estandarizado.
Sin embargo, veo múltiples interfaces, y el código de muestra en la web a veces usa ILoggerFactory
y crea un registrador en el ctor de la clase. También hay lo ILoggerProvider
que parece una versión de solo lectura de Factory, pero las implementaciones pueden o no implementar ambas interfaces, por lo que tendría que elegir. (Factory parece más común que Provider).
Algunos códigos que he visto usan la ILogger
interfaz no genérica e incluso pueden compartir una instancia del mismo registrador, y algunos toman un ILogger<T>
en su ctor y esperan que el contenedor DI admita tipos genéricos abiertos o registro explícito de todas y cada una de las ILogger<T>
variaciones de mi biblioteca usos.
En este momento, creo que ILogger<T>
es el enfoque correcto, y tal vez un ctor que no toma ese argumento y simplemente pasa un Null Logger en su lugar. De esa forma, si no se necesita registro, no se utiliza ninguno. Sin embargo, algunos contenedores DI recogen el ctor más grande y, por lo tanto, fallarían de todos modos.
Tengo curiosidad por saber qué se supone que debo hacer aquí para crear la menor cantidad de dolor de cabeza para los usuarios, y al mismo tiempo permitir el soporte de registro adecuado si lo desea.