使用NetStandard2.0库中的HttpContext请求/响应/会话



升级一个由70多个应用程序和200多个基类库(C#(组成的大型.NET Framework 4.8企业应用程序

基类库正在转换为.NET Standard 2.0,以便.NET Framework和.NET核心应用程序可以使用它们。每个应用程序的迁移都可以在准备好后完成。

遇到看似常见的情况,但无法找到解决方案

基类库具有静态HttpContext请求/响应/会话引用。我知道我可以重构这些依赖关系,但这是一项艰巨的工作;

用一个简单的例子;

public class QueryStringHelper : IQueryStringHelper
{
public string GetValue(string key) => HttpContext.Current.Request[key];
}

HttpContext在System.Web中并不存在,需要通过IHttpContextAccessor注入。

public class QueryStringHelper : IQueryStringHelper
{
private readonly IHttpContextAccessor _httpContextAccessor;
public QueryStringHelper(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public string GetValue(string key) => _httpContextAccessor.HttpContext.Request[key];
}

从.NETCore应用程序中使用这个基类库非常简单,只需向DI容器注册即可

builder.Services.AddHttpContextAccessor();

但是。。我们如何从.NET Framework应用程序中使用这个基类?这完全是错误的做法吗?或者有办法做到这一点吗?

.NET Framework和.NET Core在这些类中存在巨大的基本差异。

例如,.NET Framework会话可以容纳任何对象,而.NET Core会话只能存储字符串。

您不能简单地交换这些类,并期望您的代码同时在这两个类中工作。如果你真的需要你的项目跨.NET Framework和.NET Core工作,你需要多目标,并使用条件编译来解释差异。

项目文件中NuGet包的多目标| Microsoft Docs

最新更新