如何设置 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 有关于使用 Core 3.0 设置自身的文档 ASP.Net 但由于他们的示例使用标准 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提供的模板创建的全新项目。

在你的程序中.cs你应该为Autofac添加.UseServiceProviderFactory(new AutofacServiceProviderFactory())方法,为nlog添加.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>();
}

最新更新