.net 如何在库项目中获取对IWebHostEnvironment的引用?(也在静态类中:()

2cmtqfgy  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(338)

我需要使用Server.MapPath。因为库项目没有Startup.cs,所以我无法以正常方式应用。

xzv2uavs

xzv2uavs1#

首先,在使用Library项目的项目的Startup.cs中注册HttpcontextAccessor服务,

services.AddHttpContextAccessor();

然后在课堂上,

private static HttpContext _httpContext => new HttpContextAccessor().HttpContext;
private static IWebHostEnvironment _env => (IWebHostEnvironment)_httpContext.RequestServices.GetService(typeof(IWebHostEnvironment));

现在您可以在静态类和静态方法中访问它。
这对我来说很管用,如果有人需要的话。

ippsafx7

ippsafx72#

.NET 6.0中另一种可能的解决方案如下:

public static class MainHelper
{
    public static IWebHostEnvironment _hostingEnvironment;
    public static bool IsInitialized { get; private set; }
    public static void Initialize(IWebHostEnvironment hostEnvironment)
    {
        if (IsInitialized)
            throw new InvalidOperationException("Object already initialized");

        _hostingEnvironment = hostEnvironment;
        IsInitialized = true;
    }
}

Program.cs中注册HttpcontextAccessor并发送要初始化的参数

builder.Services.AddHttpContextAccessor();
MainHelper.Initialize(builder.Environment);

现在,您可以在项目中的任何位置使用**_hostingEnvironment**,如下所示:

var path = MainHelper._hostingEnvironment.ContentRootPath;

var path = MainHelper._hostingEnvironment.WebRootPath;

相关问题