2016-06-15 13 views
0

我正在使用NINject創建一個MVC應用程序作爲我的IOC。我試圖將我的業務邏輯從控制器中分離出來。所以我不希望我的控制器構造函數爲我的任何依賴對象創建,即我不想在構造函數中傳遞接口,並且它通過IOC容器解析。它應該是業務邏輯層的責任。我正試圖達到如下所示。從MVC中的控制器構造函數中刪除依賴項

public BusinessHolidayController() 
{ 

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

其通用方法 – maxspan

+0

那麼,可以是busienss邏輯類,也可以是我可以寫一個擴展方法爲控制器解決依賴關係,並獲得所需的對象。 – maxspan

+1

你能再詳細一點嗎? 「依賴對象」是什麼意思?最重要的是,這有什麼問題? – Leo

回答

3

你是什麼東西上面做的是向Service Locator模式這是反模式和危險的圖案傾斜。它的缺點大於它的優點。

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

  1. 構造器注入
  2. 物業注射
  3. 方法Injecton
  4. 周圍語境

對於MVC控制器,你要使用構造函數注入,因爲它是上述四種模式中最好的模式,特別是對於控制器。

它應該是業務邏輯層的責任。

編號複合根應放置應用程序的入口點,如Global.asax。

欲瞭解更多信息,你想讀Mark Seemann's Dependency Injection in .NET

+0

你的意思是我應該在Global.asax或IOC容器初始值設定項中解析我的依賴項。 – maxspan