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.

Utilice IServiceProvider en el método de extensión AddLogging de Microsoft.Extensions.DependencyInjection.

Tengo una aplicación en la que me gustaría configurar NLog con un archivo de configuración como este.

services.AddLogging(loggingBuilder =>
            {
                loggingBuilder
                    .ClearProviders()
                    .AddNLog(projectInfo.GetNLogConfigPath())
                    .AddFilter("Microsoft", LogLevel.Warning);
            })

Sin embargo, me gustaría obtener esta ubicación del archivo desde un servicio singleton de DI. Busqué un proveedor de servicios pero todo lo que encontré es la colección de servicios del loggingBuilder (por ahora, projectInfo es una variable local).

¿Existe alguna forma de obtener el proveedor de servicios en el método de extensión AddLogging?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible obtener el proveedor de servicios en la acción del método de extensión AddLogging. Puede modificar el código de la siguiente manera:

    services.AddLogging(loggingBuilder =>
    {
        loggingBuilder
            .ClearProviders();
    
            var serviceProvider = services.BuildServiceProvider();
            var projectInfo = serviceProvider.GetService<iprojectinfo>();
    
            loggingBuilder
                .AddNLog(projectInfo.GetNLogConfigPath())
                .AddFilter("Microsoft", LogLevel.Warning);
    });
    

    En este código modificado, estamos utilizando el método services.BuildServiceProvider() para obtener la instancia del proveedor de servicios. Luego, estamos recuperando el servicio singleton necesario IProjectInfo utilizando el método serviceProvider.GetService<iprojectinfo>(). Finalmente, estamos utilizando la instancia projectInfo recuperada para obtener la ubicación del archivo de configuración de NLog.

    Tenga en cuenta que este enfoque asume que el servicio IProjectInfo está registrado como un servicio singleton en la colección de servicios (services) antes de llamar al método AddLogging.

Comments are closed.