【发布时间】:2021-11-25 10:02:15
【问题描述】:
我需要为每个用户保存一些信息,例如语言和时区,所以我将它们保存在 cookie 中并通过整个网站访问它们。以前更容易在控制器外部访问 httpContext,但在 .Net Core 中,我看到需要使用注入。
我看了很多文章,过程是:
- 为类创建接口
- 创建将访问 HttpContext 的实际类
- 在 Startup.cs 设置注入并注册依赖
- 从 Controller 的构造函数调用类
在 Microsoft 此处查看详细信息:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-context?view=aspnetcore-5.0
现在,问题是,这只会将问题提升到更高级别,您只能从控制器实例化您的类,但是如果您需要从另一个地方调用该类,例如在另一个类中,那么您需要像这样调用构造函数
注入类:
public class MyClass : IMyClass
{
private readonly IHttpContextAccessor _httpContextAccessor;
public MyClass(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
...
}
使用上面注入的新类:
public class MyClass2
{
public MyClass2() {
MyClass myclass = new MyClass(httpContextAccessor)
}
}
但此时您没有 httpContextAccessor 对象,因为没有从控制器调用并将 httpContextAccessor 传递给这个新类只是......不可行。
那么,如何正确地做到这一点呢?如何将 HttpContext 注入到一个类中,以及如何在不依赖控制器的情况下调用该类?
【问题讨论】:
标签: asp.net-core dependency-injection httpcontext