[英]Using Autofac with ASP.Net Core 3.1 generic host "Worker Service" application
在 ASP.Net Core 應用程序中,使用以下命令可以輕松配置 Autofac:
public class Program
{
public static void Main(string[] args)
{
// ASP.NET Core 3.0+:
// The UseServiceProviderFactory call attaches the
// Autofac provider to the generic hosting mechanism.
var host = Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webHostBuilder => {
webHostBuilder
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>();
})
.Build();
host.Run();
}
}
public class Startup
{
// Omitting extra stuff so you can see the important part...
public void ConfigureServices(IServiceCollection services)
{
// Add controllers as services so they'll be resolved.
services.AddMvc().AddControllersAsServices();
}
public void ConfigureContainer(ContainerBuilder builder)
{
// If you want to set up a controller for, say, property injection
// you can override the controller registration after populating services.
builder.RegisterType<MyController>().PropertiesAutowired();
}
}
但是在通用主機中, Worker 類沒有任何對ConfigureServices
和ConfigureContainer
內置支持。
如何在非 ASP.Net Core 應用程序中為通用主機啟用相同的功能?
通用主機構建器確實具有對ConfigureContainer
和ConfigureServices
內置支持
var host = Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureContainer<ContainerBuilder>(builder => {
builder.RegisterType<MyDependencyType>();
//...
})
.ConfigureServices(services => {
services.AddHostedService<Worker>();
//...
})
.ConfigureWebHostDefaults(webHostBuilder => {
webHostBuilder
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>();
})
.Build();
host.Run();
添加到@Nkosi 的優秀答案中:
如果您還需要從 ConfigureContainer 訪問一些配置數據,請使用 (hostContext, services) 重載:
// ...
.ConfigureContainer<ContainerBuilder>((hostContext, builder) =>
{
IConfiguration configuration = hostContext.Configuration;
var myDbConnectionString = configuration.GetConnectionString("MyDbConnection");
builder.RegisterType<MyDependencyType>();
}))
// ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.