您如何设置 ASP.Net 3.0 Core Web API 项目以使用 AutoFac 和 NLog?

How do you setup an ASP.Net 3.0 Core Web API project to use AutoFac and NLog?

我知道这个问题要求如何将两个库集成到一个.Net项目中,但是经过大量搜索和阅读文章后,我找不到任何特别有用的东西。无论如何,由于在 ASP.Net Core 中设置日志依赖项有点特殊,我认为请求如何在 ASP.Net Core 3.0 中使用依赖项示例设置 Autofac 是一个很好的示例案例Web API 项目。

我有一个全新的 ASP.Net Core 3.0 Web API 项目(来自 Visual Studio 2019 模板),我需要添加 Autofac 和 NLog。

Autofac 有关于使用 ASP.Net Core 3.0 设置自身的文档,但由于他们的示例使用标准 Web 项目(完成 Razor 和 MVC 设置),项目模板的结构与基本 ASP.Net Web API 项目。我不知道如何将 Web 项目信息转换为我的 Web API 项目。

我认为我的大部分问题是尝试设置 Autofac 但由于我要设置的第一个注入组件是 ASP.Net Core 的记录器引擎,因此尝试让两者一起工作似乎是明智的在尝试设置我可能编写的其他组件之前,这些组件应该更容易实现。

如果有人可以从全新的 ASP.Net Core 3.0 Web API 项目中提供一些基本示例来展示如何正确设置 Autofac 和 NLog,那将很有帮助。我没有做任何非典型或奇特的事情,目前,我的项目是根据 Visual Studio 2019.

提供的模板创建的全新项目。

在你的 Program.cs 中你应该为 Autofac 添加 .UseServiceProviderFactory(new AutofacServiceProviderFactory()) 方法和 .UseNLog()NLogBuilder.ConfigureNLog("nlog.config") 用于 nlog。

public class Program
{
    public static void Main(string[] args)
    {
        NLogBuilder.ConfigureNLog("nlog.config");
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseServiceProviderFactory(new AutofacServiceProviderFactory())
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .ConfigureLogging(logging =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(LogLevel.Trace);
            })
            .UseNLog();
}

UseNLog 方法将在内部依赖注入中注册东西,Autofac 将使用它。多亏了这个方法,你不必为 NLog 和 Autofac 做任何事情。

startup.cs 文件中你应该添加一个 ConfigureContainer 方法来配置 Autofac 但你没有不必为 NLog 做任何事情。

public void ConfigureContainer(ContainerBuilder builder)
{
    // do whatever you want with Autofac 

    // you don't have to register anything for NLog 
    // the `UseNLog` method will register everything for you 

    builder.RegisterType<Service>().As<IService>();
}