具有多个存储库的ASP.Net MVC单个控制器

时间:2018-09-27 06:39:56

标签: c# asp.net-mvc-5 controller

我有一个返回存储库的数据访问层。 例如,我具有以下存储库接口:

我有这些存储库的Entity Framework实现。这些实现通过Ninject在运行时注入。

我有一个控制器,下面提供了多个存储库

public class Outer {

    private class Inner {
        private int var = 1;

        public Inner(int a) {
            System.out.println("___");
        }

        public void test(int a) {
            System.out.println("Hey");
        }
    }
}

具有名为-HomeController的单个控制器

为了进行功能操作,我需要在实现中使用DBContext,这就是为什么我要像下面给出的那样实现所有这些接口的原因:

main() {
    Outer b = new Outer();
    System.out.println(b);
    Class<?> innerClass = Class.forName("car.Outer$Inner");

    Constructor<?> constructor = innerClass.getDeclaredConstructor(Outer.class, 1);

    constructor.setAccessible(true);
    Object c = constructor.newInstance(b,b);

    Method method = c.getClass().getDeclaredMethod("test");
    method.setAccessible(true);
    method.invoke(c, 1);
}

现在我在HomeController中有一个看起来像这样的构造函数:

 IUploadRepository _uploadRepository;
 ISalesRepository _salesRepository; 
 ITRSalesRepository _trsalesRepository;
 ILocalPurchaseRepository _localRepository;

如何在此控制器中使用其他控制器?将多个仓库回注到控制器中是否是错误的做法? 我已经尝试过如下所示的方式:

public class UploadRepository : IUploadRepository
{
    private readonly XMANEntities _entities;
    public UploadRepository(XMANEntities entities)
    {
        _entities = entities;
    }
    *here goes all implementation with context for specific*
}

1 个答案:

答案 0 :(得分:0)

对一个对象注入多个依赖关系是完全可以接受的。但是,请尽可能避免(事务对象除外)以防止责任混合。您可以查看的一种方法是存储过程。

 private IUploadRepository _uploadRepository;
 private ISalesRepository _salesRepository; 
 private ITRSalesRepository _trsalesRepository;
 private ILocalPurchaseRepository _localRepository;

 public HomeController(
      IUploadRepository uploadRepository,
      ISalesRepository salesRepository,
      ITRSalesRepository trsalesRepository,
      ILocalPurchaseRepository localRepository
 )
 {
     this._uploadRepository = uploadRepository;
     this._salesRepository= salesRepository;
     this._trsalesRepository= trsalesRepository;
     this._localRepository= localRepository;
 }