我有一个返回存储库的数据访问层。 例如,我具有以下存储库接口:
我有这些存储库的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*
}
答案 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;
}