【问题标题】:Will Autofac support IWebHostBuilder API in netcore 3+?Autofac 会在 netcore 3+ 中支持 IWebHostBuilder API 吗?
【发布时间】:2020-08-05 22:39:23
【问题描述】:
【问题讨论】:
标签:
asp.net-core
.net-core
autofac
【解决方案1】:
在 ASP.NET Core 3.x 中,他们改变了依赖注入的集成方式,不,版本 2.x 文档不再适用 - 无论是在 Autofac 案例中还是在 ASP.NET 案例中。 ASP.NET Core 有意转移到通用托管模型,其中 Web 主机是其之上的一层。
并不是 Autofac“无意支持 IWebHostBuilder”,而是 这不是 ASP.NET Core 3 中的选项。它在框架级别发生了变化;这不再是您与 ASP.NET Core 集成的方式了。您不再将 DI 工厂附加到 Web 主机,而是将其附加到外部通用主机。
您做在Startup 类中注册东西,就像在 ASP.NET Core 2 中一样。
The docs you linked to 解释所有这些并显示示例。您还可以将see in the Microsoft ASP.NET Core 2 to 3 migration docs HostBuilder 替换为WebHostBuilder; WebHostBuilder,虽然它可能仍然存在,但已被弃用,你不应该使用它。
【解决方案2】:
您可以在 Startup 类上创建具有IWebHostEnvironment 的构造函数参数,并且asp.net 核心将自动注入IWebHostEnvironment。
在ConfigureContainer 上注册IWebHostBuilder 作为实例。
请看下面的代码。
public class Startup
{
private readonly IWebHostEnvironment _environment;
// Auto injection IWebHostEnvironment
public Startup(IWebHostEnvironment environment)
{
_environment = environment;
}
public void ConfigureServices(IServiceCollection services)
{
// ...
}
// Autofac ID
public void ConfigureContainer(ContainerBuilder builder)
{
// Register your own things directly with Autofac, like:
builder.Register<SampleClass>();
// Register your IWebHostEnvironment
builder.RegisterInstance(_environment);
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
}
}
public class SampleClass
{
private readonly IWebHostEnvironment _environment;
// If you register IWebHostEnvironment on the Startup, IWebHostEnvironment will auto inject.
public SampleClass(IWebHostEnvironment environment)
{
_environment = environment;
}
}
当你解析SampleClass时,你可以看到IWebHostEnvironment被自动注入到构造函数中。