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; }
-
-
}
}