簡體   English   中英

將 Autofac 與 ASP.Net Core 3.1 通用主機“Worker Service”應用程序一起使用

[英]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 類沒有任何對ConfigureServicesConfigureContainer內置支持。

如何在非 ASP.Net Core 應用程序中為通用主機啟用相同的功能?

通用主機構建器確實具有對ConfigureContainerConfigureServices內置支持

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();

參考.NET 通用主機

添加到@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM