首页 > 解决方案 > 如何设置 ASP.Net 3.0 Core Web API 项目以使用 AutoFac 和 NLog?

问题描述

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

我有一个全新的 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 提供的模板创建的全新项目。

标签: c#asp.net-mvcautofacnlogasp.net-core-3.0

解决方案


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

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将使用它。多亏了这种方法,您不必为使用 Autofac 的 NLog 做任何事情。

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

推荐阅读