命名空间.AspNetCore.Hosting vs .Extensions.Hosting

San*_*ndy 11 asp.net-core

在我的ASP.NET Core 2.0项目中,我一直在使用Microsoft.Extensions.Hosting命名空间中的IHostingEnvironment和IApplicationLifetime.

在ASP.NET Core 2.1中,这些接口似乎同时位于Microsoft.AspNetCore.Hosting和Microsoft.Extensions.Hosting命名空间中.有什么区别,我应该使用哪个命名空间?

仅供参考,我也在使用BackgroundService类,它现在是Microsoft.Extensions.Hosting命名空间中的(Core 2.1).

Hen*_*ema 14

自ASP.NET Core 2.0以来,有两种托管模型:

  • 我们一直拥有的ASP.NET核心虚拟主机模型:它位于Microsoft.AspNetCore.Hosting命名空间中.
  • 一种新的通用托管模型,用于支持控制台应用程序和Windows服务等其他应用程序中的基础架构和交叉问题:它位于Microsoft.Extensions.Hosting命名空间中.

两种不同模型之间存在一些重复的接口和其他类型.对于Web应用程序,你一般应在使用类型的Microsoft.AspNetCore.Hosting命名空间,除了IHostedService,BackgroundService和其他相关类型.

仍然有一些工作要继续将通用托管模型的类型和逻辑移动,并改善两者之间的兼容性.例如,IHostingEnvironment并且IApplicationLifetime在网络托管模式可能会从相同的接口继承在将来的版本中通用的托管模式.

  • 在2.2中看起来如何?我们现在应该看看Microsoft.Extensions.Hosting吗?专门用于IHostingEnvironment。 (4认同)

sde*_*dec 5

这篇文章也解释了一下,也解释了.NET Core 3中是什么情况: https://andrewlock.net/ihostingenvironment-vs-ihost-environment-obsolete-types-in-net-core-3/

基本上在 .NET Core 3 中,这两个接口都被标记为过时。

它们被替换如下:

  • Microsoft.Extensions.Hosting。IHostingEnvironment (.NET Core 2.x)
    与 Microsoft.Extensions.Hosting。IHostEnvironment(.NET Core 3.x)
  • Microsoft.AspNetCore.Hosting。IHostingEnvironment (.NET Core 2.x)
    与 Microsoft.AspNetCore.Hosting。IWebHostEnvironment (.NET Core 3.x) 现在继承自IHostEnvironment !!

好处:.NET Core 3 IHostEnvironment在所有应用程序中兼容。