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

问题描述 投票:0回答:3

我需要使用Server.MapPath。由于库项目没有 Startup.cs,我无法应用正常的方式。

.net .net-5 library-project server.mappath
3个回答
5
投票

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

services.AddHttpContextAccessor();

然后在课堂上,

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

现在您可以在静态类和静态方法中访问它。

这对我有用。如果有人需要的话


1
投票

.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并发送参数到Initialize

builder.Services.AddHttpContextAccessor(); MainHelper.Initialize(builder.Environment);
现在您可以在项目中的任何位置使用

_hostingEnvironment,如下所示:

var path = MainHelper._hostingEnvironment.ContentRootPath;

var path = MainHelper._hostingEnvironment.WebRootPath;
    

0
投票
我也有同样的问题。很容易解决。

由于我在 dotnet 8 中使用 Clean Architecture,因此我需要在单独的类库中使用一些 Asp.Net 功能,例如 IFormFile 和 IWebHostEnvironment。

过去,我们可以使用一些软件包来访问它们,但现在它们都已弃用。

原因:基于

Microsoft 文档

随着 .NET Core 3.0 的发布,许多 ASP.NET Core 程序集不再作为包发布到 NuGet。

解决方案:

解决方法太简单了,只需按照以下步骤操作即可:

1- 转到您的类库并打开 csproj 文件

2- 添加此:

<ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup>
您完成的 csproj 文件必须是这样的:

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup> </Project>
    
© www.soinside.com 2019 - 2024. All rights reserved.