从MVC中的Controller构造中删除依赖关系

时间:2016-06-15 04:28:51

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

我正在使用NINject作为我的IOC创建一个MVC应用程序。我试图将我的业务逻辑与控制器分开。所以我不希望我的控制器构造函数为我的任何依赖对象创建,即我不想在构造函数中传递我的接口,而是通过IOC容器解析它。它应该是业务逻辑层的责任。我正在努力实现以下目标。

public BusinessHolidayController()
{

}
// GET: BusinessHoliday
public ActionResult Index(Product product)
{
    string model = invoke<IProduct>().GetSum(product);
    return View(model);
}

1 个答案:

答案 0 :(得分:3)

您要做的就是倾向于服务定位器模式,这是反模式和危险模式。它的缺点大于它的优点。

有四种基本的DI模​​式 -

  1. 构造函数注入
  2. 物业注入
  3. Method Injecton
  4. 环境背景
  5. 对于MVC控制器,您希望使用构造函数注入,因为它是上述四种模式的最佳模式,尤其是对于控制器。

      

    它应该是业务逻辑层的责任。

    没有。 Composite Root应该放在应用程序的入口点,例如Global.asax。

    有关详情,请阅读Mark Seemann's Dependency Injection in .NET