【发布时间】:2018-09-27 06:39:56
【问题描述】:
我有一个返回存储库的数据访问层。 例如,我有以下存储库接口:
我有这些存储库的实体框架实现。这些实现在运行时使用 Ninject 注入。
我有一个控制器,下面给出了多个存储库
IUploadRepository _uploadRepository;
ISalesRepository _salesRepository;
ITRSalesRepository _trsalesRepository;
ILocalPurchaseRepository _localRepository;
使用名为 -HomeController 的单个控制器
为了功能操作,我需要在实现中使用 DBContext,这就是为什么我实现所有这些接口,如下所示:
public class UploadRepository : IUploadRepository
{
private readonly XMANEntities _entities;
public UploadRepository(XMANEntities entities)
{
_entities = entities;
}
*here goes all implementation with context for specific*
}
现在我在 HomeController 中有一个构造函数,看起来像这样:
public class HomeController : Controller
{
private IUploadRepository uploadRepository;
public HomeController()
{
this.uploadRepository = new UploadRepository(new XMANContext());
}
public HomeController(IUploadRepository uploadRepository)
{
this.uploadRepository = uploadRepository;
}
}
如何在此控制器中使用其他人。将多个 repo 注入控制器是不好的做法吗? 我已经尝试过这种方式,如下所示:
public HomeController() : this(new UploadRepository(
new XMANEntities()), new SalesRepository(new XMANEntities()),
new TRSalesRepository(
new XMANEntities()), new LocalPurchaseRepository(new XMANEntities()))
{
}
public HomeController(UploadRepository uploadRepository, SalesRepository salesRepository,
TRSalesRepository trsalesRepository, LocalPurchaseRepository localPurchaseRepository)
{
this.uploadRepository = uploadRepository;
this.salesRepository = salesRepository;
this.trsalesRepository = trsalesRepository;
this.localPurchaseRepository = localPurchaseRepository;
}
【问题讨论】:
-
你一点也不
can在一个控制器中使用多个存储库 -
你只需添加额外的参数 -
public HomeController(IUploadRepository uploadRepository, ISalesRepository salesRepository, etc) -
谢谢,但我已经尝试过了,但我不知道为什么不实例化它。它给出了对象引用未设置为对象实例的异常。
-
Stephen 现在我已经编辑了我尝试过的内容,但是当我调用此 repo 的函数之一时,它给了我对象引用未设置为对象的实例。
-
需要删除默认构造函数并配置Ninject将依赖注入到控制器中
标签: c# asp.net-mvc-5 controller