如何在 ASPNETCore 中的抽象 class 中获取 HttpContext
How can I get HttpContext inside an abstract class in ASPNETCore
我有以下存储库:
public class TestRepository : WebCaller<Data>, ITestRepository
{
string connString = this.GetConnectionString();
.... some code here
}
在我的存储库中,我可以Dependency Injection
构造函数没有问题。
在我的摘要中 class WebCaller
我需要以某种方式访问 HttpContext
,我读到你可以 Inject
IHttpContextAccessor
访问到上下文,但因为这是一个 Abstract
class,它也存在于 Web 项目之外,所以我没有构造函数。
我正在尝试这样做:
public abstract class WebCaller<T> : WebRequest, IDisposable
{
//[Inject]
public ITestRepository TestRepo
{
get
{
return this.HttpContext.RequestServices.GetRequiredService<ITestRepository >();
}
}
..... more code here
}
正在尝试使用 Inject
属性,但正在读取不再可用的属性,因此应该通过其他方式将 HttContext
传递给摘要 class。
你可以在你的摘要上有一个构造函数 class。只需向其中注入 IHttpContextAccessor
即可。然后任何派生的 class 也将采用 IHttpContextAccessor
并将其传递给它的 base
构造函数(您的抽象 class 构造函数)。您可以使抽象 class 构造函数 protected
.
喜欢:
public abstract class WebCaller<T> : WebRequest, IDisposable
{
protected WebCaller(IHttpContextAccessor contextAccessor)
{
}
}
public class TestRepository : WebCaller<Data>, ITestRepository
{
public TestRepository(IHttpContextAccessor contextAccessor) : base(contextAccessor)
{
}
string connString = this.GetConnectionString();
.... some code here
}
我有以下存储库:
public class TestRepository : WebCaller<Data>, ITestRepository
{
string connString = this.GetConnectionString();
.... some code here
}
在我的存储库中,我可以Dependency Injection
构造函数没有问题。
在我的摘要中 class WebCaller
我需要以某种方式访问 HttpContext
,我读到你可以 Inject
IHttpContextAccessor
访问到上下文,但因为这是一个 Abstract
class,它也存在于 Web 项目之外,所以我没有构造函数。
我正在尝试这样做:
public abstract class WebCaller<T> : WebRequest, IDisposable
{
//[Inject]
public ITestRepository TestRepo
{
get
{
return this.HttpContext.RequestServices.GetRequiredService<ITestRepository >();
}
}
..... more code here
}
正在尝试使用 Inject
属性,但正在读取不再可用的属性,因此应该通过其他方式将 HttContext
传递给摘要 class。
你可以在你的摘要上有一个构造函数 class。只需向其中注入 IHttpContextAccessor
即可。然后任何派生的 class 也将采用 IHttpContextAccessor
并将其传递给它的 base
构造函数(您的抽象 class 构造函数)。您可以使抽象 class 构造函数 protected
.
喜欢:
public abstract class WebCaller<T> : WebRequest, IDisposable
{
protected WebCaller(IHttpContextAccessor contextAccessor)
{
}
}
public class TestRepository : WebCaller<Data>, ITestRepository
{
public TestRepository(IHttpContextAccessor contextAccessor) : base(contextAccessor)
{
}
string connString = this.GetConnectionString();
.... some code here
}