diff --git a/NLog.Web.AspNetCore/AspNetExtensions.cs b/NLog.Web.AspNetCore/AspNetExtensions.cs index 6a6bcc39..f63cab2e 100644 --- a/NLog.Web.AspNetCore/AspNetExtensions.cs +++ b/NLog.Web.AspNetCore/AspNetExtensions.cs @@ -21,6 +21,8 @@ namespace NLog.Web /// public static class AspNetExtensions { + private static readonly Assembly _nlogWebAssembly = typeof(AspNetExtensions).GetTypeInfo().Assembly; + /// /// Enable NLog Web for ASP.NET Core. /// @@ -30,9 +32,7 @@ public static class AspNetExtensions #endif public static void AddNLogWeb(this IApplicationBuilder app) { - ServiceLocator.ServiceProvider = app.ApplicationServices; - ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly); - LogManager.AddHiddenAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly); + app.ApplicationServices.SetupNLogServiceLocator(); } /// @@ -43,8 +43,8 @@ public static void AddNLogWeb(this IApplicationBuilder app) /// LoggingConfiguration for chaining public static LoggingConfiguration ConfigureNLog(this IHostingEnvironment env, string configFileRelativePath) { - ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly); - LogManager.AddHiddenAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly); + ConfigurationItemFactory.Default.RegisterItemsFromAssembly(_nlogWebAssembly); + LogManager.AddHiddenAssembly(_nlogWebAssembly); var fileName = Path.Combine(env.ContentRootPath, configFileRelativePath); LogManager.LoadConfiguration(fileName); return LogManager.Configuration; @@ -63,7 +63,7 @@ public static LoggingConfiguration ConfigureNLog(this IHostingEnvironment env, s [Obsolete("Use UseNLog() on IWebHostBuilder, and NLog.Web.NLogBuilder.ConfigureNLog()")] public static LogFactory ConfigureNLog(this ILoggingBuilder builder, string configFileName) { - ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly); + ConfigurationItemFactory.Default.RegisterItemsFromAssembly(_nlogWebAssembly); builder.AddNLog(); return LogManager.LoadConfiguration(configFileName); } @@ -79,7 +79,7 @@ public static LogFactory ConfigureNLog(this ILoggingBuilder builder, string conf [Obsolete("Use UseNLog() on IWebHostBuilder, and NLog.Web.NLogBuilder.ConfigureNLog()")] public static LogFactory ConfigureNLog(this ILoggingBuilder builder, LoggingConfiguration configuration) { - ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly); + ConfigurationItemFactory.Default.RegisterItemsFromAssembly(_nlogWebAssembly); builder.AddNLog(); LogManager.Configuration = configuration; return LogManager.LogFactory; @@ -103,8 +103,9 @@ public static IWebHostBuilder UseNLog(this IWebHostBuilder builder, NLogAspNetCo { if (builder == null) throw new ArgumentNullException(nameof(builder)); options = options ?? NLogAspNetCoreOptions.Default; - - ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(AspNetExtensions).GetTypeInfo().Assembly); + + ConfigurationItemFactory.Default.RegisterItemsFromAssembly(_nlogWebAssembly); + LogManager.AddHiddenAssembly(_nlogWebAssembly); builder.ConfigureServices(services => { @@ -125,5 +126,20 @@ public static IWebHostBuilder UseNLog(this IWebHostBuilder builder, NLogAspNetCo } #endif + /// + /// Override the default used by the NLog ServiceLocator. + /// NLog ServiceLocator uses the to access context specific services (Ex. ) + /// + /// + /// Should only be used if the standard approach for configuring NLog is not enough + /// + /// + public static IServiceProvider SetupNLogServiceLocator(this IServiceProvider serviceProvider) + { + ServiceLocator.ServiceProvider = serviceProvider; + ConfigurationItemFactory.Default.RegisterItemsFromAssembly(_nlogWebAssembly); + LogManager.AddHiddenAssembly(_nlogWebAssembly); + return serviceProvider; + } } } diff --git a/NLog.Web.AspNetCore/DependencyInjection/ServiceLocator.cs b/NLog.Web.AspNetCore/Internal/ServiceLocator.cs similarity index 99% rename from NLog.Web.AspNetCore/DependencyInjection/ServiceLocator.cs rename to NLog.Web.AspNetCore/Internal/ServiceLocator.cs index a834485f..630096a9 100644 --- a/NLog.Web.AspNetCore/DependencyInjection/ServiceLocator.cs +++ b/NLog.Web.AspNetCore/Internal/ServiceLocator.cs @@ -16,7 +16,5 @@ internal static class ServiceLocator /// The current service provider for reading ASP.NET Core session, request etc. /// public static IServiceProvider ServiceProvider { get; set; } - - } }