es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Implementar el registro en la biblioteca en múltiples versiones del Marco de Destino.

He escrito una biblioteca que se compila contra varias versiones de Framework Objetivo admitidas. Necesito registrar el inicio de sesión en mi biblioteca, pero no quiero obligar al usuario final a utilizar un marco de registro específico. Por ejemplo, no quiero depender internamente de algo como log4net, lo cual obligaría al usuario final a actualizar su versión de log4net, causando problemas de enlace de ensamblado desagradables o de cualquier otra manera afectar al usuario final.

Estoy buscando una solución genérica a este problema que funcione en todas las versiones del Framework .Net 4.5 a 4.8, .NET Core *, .NET Standard 2.0, .NET 5 y 6.

Estoy seguro de que este problema ya se ha presentado antes, pero no he tenido suerte encontrando artículos sobre soluciones que se ajusten a mi situación, específicamente a las versiones de TFM que necesito admitir.

Empiezo a inclinarme por hacer que el usuario final pase delegados Action<> a la configuración inicial de mi biblioteca, que representen los métodos Info, Warn, Error y Debug específicos de su configuración de registro, y simplemente mantener una referencia a ellos, aunque estoy seguro de que esto puede tener problemas de recopilación de basura. Mantengo la esperanza de encontrar otra solución.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una solución a este problema es utilizar la abstracción de registro integrada en .NET, Microsoft.Extensions.Logging. Esta abstracción te permite escribir mensajes de registro en una interfaz común, independientemente del marco de registro subyacente que se esté utilizando.

    Para utilizar este enfoque, deberías agregar el paquete NuGet correspondiente (Microsoft.Extensions.Logging para .NET Framework, Microsoft.Extensions.Logging.Abstractions para .NET Core y .NET Standard) a tu proyecto de biblioteca. Luego, debes definir una interfaz en tu biblioteca que represente los métodos de registro que necesitas (Info, Warn, Error, Debug).

    A continuación, deberías crear un proveedor de registros en tu biblioteca que implemente esta interfaz utilizando Microsoft.Extensions.Logging. Este proveedor podría ser configurado por el usuario final con el marco de registro elegido. Por ejemplo, podrían configurar un ConsoleLoggerProvider para fines de depuración, o un SerilogLoggerProvider para uso en producción.

    Finalmente, deberías exponer la interfaz de registro en la API pública de tu biblioteca, permitiendo al usuario final pasar una instancia de la interfaz respaldada por su proveedor de registro elegido.

    Este enfoque permite que tu biblioteca siga siendo independiente de cualquier marco de registro específico, al tiempo que permite a tus usuarios utilizar su marco preferido. Además, las preocupaciones de recolección de basura mencionadas en la pregunta no son un problema, ya que el proveedor de registro se mantiene como una instancia singleton por el propio marco de registro.

Comments are closed.