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();
}
}
ただし、一般的なホストでは、ワーカークラスにはConfigureServices
およびConfigureContainer
のサポートが組み込まれていません。
ASP.Net Core以外のアプリケーションの汎用ホストで同じようにするにはどうすればよいですか?
generic Host builder にはConfigureContainer
およびConfigureServices
の組み込みサポートがあります
var Host = Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureContainer<ContainerBuilder>(builder => {
builder.RegisterType<MyDependencyType>();
//...
})
.ConfigureServices(services => {
services.AddHostedService<Worker>();
//...
})
.Build();
Host.Run();
リファレンス 。NET Generic Host