web-dev-qa-db-ja.com

ASP.Net Core 3.1汎用ホスト「ワーカーサービス」アプリケーションでのAutofacの使用

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以外のアプリケーションの汎用ホストで同じようにするにはどうすればよいですか?

3
Satyajit

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

5
Nkosi