https://autofaccn.readthedocs.io/en/latest/integration/aspnetcore.html#asp-net-core-3-0-and-generic-hosting
看起来Autofac只支持通用主机APIIHostBuilder
。我想知道旧的aspnetcore2.x文档是否仍然与aspnetcore3应用程序相关。
此外,我发现https://github.com/autofac/Autofac.AspNetCore已经很长时间没有更新了,所以我想Autofac未来无意支持IWebHostBuilder
。。。
关于如何使用IWebHostBuilder
API在AspNetCore 3.x中设置Autofac,我们有什么指导方针吗?
我读到关于[这个][https://stackoverflow.com/questions/59980827/service-fabric-aspnet-core-3-1-autofac-webhostbuilder]帖子,但它没有回答我的问题。
在ASP.NET Core 3.x中,他们改变了依赖项注入的集成方式,不,2.x版本的文档不再适用——无论是在Autofac情况下还是在ASP.NET情况下。ASP.NET Core有意转向通用主机模型,其中web主机是其之上的一层。
这并不是Autofac;无意支持CCD_ 4";,不是ASP.NET Core 3中的选项。它在框架一级发生了变化;这不再是与ASP.NET Core集成的方式。您不再将DI工厂连接到web主机,而是将其连接到外部通用主机。
您可以像在ASP.NET Core 2中一样,在Startup
类中执行注册操作。
你链接的文档解释了所有这些,并展示了示例。您还可以在Microsoft ASP.NET Core 2到3迁移文档中看到HostBuilder
取代了WebHostBuilder
;而WebHostBuilder
,虽然它可能仍然存在,但正在被弃用,你不应该使用它
您可以在Startup类上创建具有IWebHostEnvironment
的构造函数参数,asp.net核心将自动注入IWebHostEnvironment
将IWebHostBuilder
注册为ConfigureContainer
上的实例
请参阅以下代码。
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
被自动注入构造函数。