IHttpContextAccessor
用在构造函数中的实用程序类中,如何在控制器中创建该类的实例。
//实用程序类
public class DBRepository
{
private readonly IHttpContextAccessor _contextAccessor;
public DBRepository(IHttpContextAccessor contextAccessor)
{
_contextAccessor = contextAccessor;
}
}
我已经这样做了,而且我被困在我的控制器里。
public class HomeController : Controller
{
using (DBRepository DBRepo=new DBRepository())
{
}
}
如何将IHttpContextAccessor
参数传递给实用程序类
答案 0 :(得分:0)
您可以为您的类创建一个接口,并让Dependency Injection框架为您注入它。
public interface IDbRepository
{
// Add methods signature here
public List<Post> GetPosts();
}
public class DBRepository : IDbRepository
{
private readonly IHttpContextAccessor _contextAccessor;
public DBRepository(IHttpContextAccessor contextAccessor)
{
_contextAccessor = contextAccessor;
}
//implement those methods
public List<Post> GetPosts()
{
// to do : return a list of Posts
}
}
现在将此界面映射到ConfigureServices
类<{1}}方法中的具体实现
Startup
现在您可以在控制器中使用构造函数注入
services.AddTransient<IDbRepository , DBRepository>();
现在可以肯定,为什么要在数据访问方法/类中访问HttpContext。 HttpContext更像是一个Web层的东西。您可以将所需的值仅传递给数据访问方法,而不是直接传递HttpContext。通过这种方式,您可以保持数据访问层不会过多依赖Httpcontext,即Web内容