【问题标题】:Create HostingEnvironment instance with WebRootPath使用 WebRootPath 创建 HostingEnvironment 实例
【发布时间】:2020-01-28 10:17:08
【问题描述】:

我正在从 netcore2.1 迁移到 netcore3.1。我有一个服务,我需要创建一个 IServiceProvider 并注入 IWebHostEnvironment(我曾经在 netcore2.1 中注入 IHostingEnvironment)。用于创建新 Microsoft.Extensions.Hosting.Internal.HostingEnvironment 实例的代码,但该类不再包含 WebRootPath。我获取了 git repo 并试图寻找 IWebHostEnvironment 的实现,但似乎唯一的实现是 aspnetcore 内部的,没有用。

是否有可能以某种方式创建 IWebHostEnvironment 的实例?

丹尼尔

【问题讨论】:

  • 这可能是XY problem。如果您可以分享minimal reproducible example,那就太好了,这样我们就可以更清楚地了解当前的问题以及您实际上要做什么?这样我们就可以为新版本的代码提出一个替代方案。
  • 你想做什么?该类是内部的,原因是应用程序的代码没有有效的方案来修改该类。您是否尝试在测试期间模拟 Web 根目录的位置?使用WebApplicationFactory。或者从不同的路径提供文件?这解释了here:将路径作为选项传递给UseStaticFiles

标签: c# asp.net-core .net-core-3.1


【解决方案1】:

您好,您可以在 Core 3.1 中使用访问 WebRoot 路径

    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Mvc;
    public class HomeController : Controller
    {
          private readonly IWebHostEnvironment _hostingEnv;

           public HomeController(IWebHostEnvironment hostingEnv)
           {
             _hostingEnv = hostingEnv;
           }

          private Void GetWebRoot()
          {
             var webRootPath = _hostingEnv.WebRootPath;
          }
     }

你可以试试这个,如果有帮助就点赞

【讨论】:

  • 嘿 - 正如我所写,我需要创建一个实现 IWebHostEnvironment 接口的类的实例,而不是使用 DI。
  • 那你为什么不使用 DI 中对 IWebHostEnvironment 的引用并将它传递给你想要创建的对象的构造函数呢?
  • 我仍然不明白实现 IWebHostEnvironment 的对象是如何创建的。
  • 只有在另一个类中实现IWebHostEnvironment才有可能,但我不知道你可能会遇到什么问题。最好只使用 DI ,而不是重新发明轮子。最佳实践是使用 DI
  • @Aranha 你没有解释你想做什么。答案做出了(非常合乎逻辑的)假设,即您要使用该属性。您不需要实现该接口,除非您想在单元/集成测试期间 mock 路径。那是你要的吗?还是您尝试使用不同的网络根目录?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2016-06-21
相关资源
最近更新 更多