Ihttpcontextaccessor在构造函数中的实用程序类中使用,如何在控制器中创建该类的实例

时间:2017-12-01 12:04:26

标签: c# asp.net-core-mvc

IHttpContextAccessor用在构造函数中的实用程序类中,如何在控制器中创建该类的实例。

//实用程序类

public class DBRepository
    {

        private readonly IHttpContextAccessor _contextAccessor;

        public DBRepository(IHttpContextAccessor contextAccessor)
        {
            _contextAccessor = contextAccessor;
        }
}

我已经这样做了,而且我被困在我的控制器里。

public class HomeController : Controller
{

       using (DBRepository DBRepo=new DBRepository())
       {

       }
}

如何将IHttpContextAccessor参数传递给实用程序类

1 个答案:

答案 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内容