问题描述
我有一个像这样的项目结构解决方案。这是一个.Net Core应用程序,前面使用了Razor Pages。
Frontend
|
|
BusinessLogic
|
|
DataAccess
我的目标是将NLog用户用作记录器。我没有通过AF。 我在Fronted项目中使用了以下代码段:
var host = Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webHostBuilder =>
{
webHostBuilder
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Information);
})
.UseNLog();
})
.Build();
但是位于业务逻辑中的服务需要注入Nlog ILogger。而且我不断得到例外
DependencyResolutionException:在类型>'BusinessLogic.Services.ApplicationService'中使用'Autofac.Core.Activators.Reflection.DefaultConstructorFinder'找到的所有构造函数都无法使用可用的> services和参数进行调用:无法解析参数'AutoFac。 Extras.NLog.DotNetCore.ILogger记录器'
如您所见,我尝试使用AutoFac.Extras.NLog.DotNetCore,但没有帮助。我真的很困惑如何使用.net核心应用正确设置Nlog。
解决方法
如果执行此操作会发生什么:
var host = Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webHostBuilder =>
{
webHostBuilder
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Trace);
})
.UseNLog()
.Build();