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?
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: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 necesarioIProjectInfo
utilizando el métodoserviceProvider.GetService<iprojectinfo>()
. Finalmente, estamos utilizando la instanciaprojectInfo
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étodoAddLogging
.