使用控制器依赖注入的多个存储库的主 - 详细视图

时间:2010-12-10 19:22:15

标签: c# asp.net-mvc dependency-injection ninject asp.net-mvc-3

我正在尝试使用Ninject将存储库注入我的MVC项目的控制器。

public class HomeController : Controller
    {
        private readonly ICustomerRepository _customerRepository;
        //
        // GET: /Home/
        public HomeController(ICustomerRepository customerRepository)
        {
            _customerRepository = customerRepository;
        }
     }

这一切都很有意义并且很容易,但是当视图变得更复杂并且需要显示主细节场景时,我是否应该注入两个存储库接口?如果它达到4或5级深度会改变吗? (例如,用户选择客户,项目,小组,部门,然后获取人员列表)

我想出了三件事。

  1. 通过构造函数注入所有必需的存储库。
  2. 创建超级存储库的概念,或
  3. 为每个存储库创建部分视图和控制器。
  4. 我应该使用这种模式的最佳做法吗?任何见解都会很棒。

2 个答案:

答案 0 :(得分:1)

选项3是最好的 - 选项1会增加HomeController的依赖项数量,这会使数据源数量增加时过于复杂。选项2为您的“超级存储库”创建了类似的问题,因为它需要大量方法来支持系统中的所有查询。

为每个较小的表单创建一个控制器将允许每个控制器相当简单,更容易推理。

答案 1 :(得分:0)

我一直在学习如何将控制器视为 - 一切的控制者。如果采用这种方法,那么我认为让它了解多个存储库/服务是完全没问题的。

主存储库方法的工作原理以及控制器端所需的实例化程度较低,但它对您正在做的事情的描述不那么明确,并使控制器更多地依赖于存储库/服务的内部知识。