【问题标题】:Will Autofac support IWebHostBuilder API in netcore 3+?Autofac 会在 netcore 3+ 中支持 IWebHostBuilder API 吗?
【发布时间】:2020-08-05 22:39:23
【问题描述】:

https://autofaccn.readthedocs.io/en/latest/integration/aspnetcore.html#asp-net-core-3-0-and-generic-hosting

Autofac 似乎只支持通用托管 API,IHostBuilder。我想知道旧的 asp netcore 2.x 文档是否仍然与 asp netcore 3 应用程序相关。

另外,我发现https://github.com/autofac/Autofac.AspNetCore已经很久没有更新了,所以我猜Autofac以后也没有打算支持IWebHostBuilder了……

我们有关于如何使用IWebHostBuilder API 在 AspNetCore 3.x 中设置 Autofac 的指南吗?

我阅读了有关 [this][https://stackoverflow.com/questions/59980827/service-fabric-aspnet-core-3-1-autofac-webhostbuilder] 的帖子,但它没有回答我的问题。

【问题讨论】:

    标签: asp.net-core .net-core autofac


    【解决方案1】:

    在 ASP.NET Core 3.x 中,他们改变了依赖注入的集成方式,不,版本 2.x 文档不再适用 - 无论是在 Autofac 案例中还是在 ASP.NET 案例中。 ASP.NET Core 有意转移到通用托管模型,其中 Web 主机是其之上的一层。

    并不是 Autofac“无意支持 IWebHostBuilder”,而是 这不是 ASP.NET Core 3 中的选项。它在框架级别发生了变化;这不再是您与 ASP.NET Core 集成的方式了。您不再将 DI 工厂附加到 Web 主机,而是将其附加到外部通用主机。

    Startup 类中注册东西,就像在 ASP.NET Core 2 中一样。

    The docs you linked to 解释所有这些并显示示例。您还可以将see in the Microsoft ASP.NET Core 2 to 3 migration docs HostBuilder 替换为WebHostBuilderWebHostBuilder,虽然它可能仍然存在,但已被弃用,你不应该使用它。

    【讨论】:

      【解决方案2】:

      您可以在 Startup 类上创建具有IWebHostEnvironment 的构造函数参数,并且asp.net 核心将自动注入IWebHostEnvironment

      ConfigureContainer 上注册IWebHostBuilder 作为实例。

      请看下面的代码。

      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被自动注入到构造函数中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-27
        • 1970-01-01
        • 2011-09-12
        相关资源
        最近更新 更多