如何设置Nlog和Autofac .Net Core应用

问题描述

我有一个像这样的项目结构解决方案。这是一个.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();

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...