我試圖理解像StructureMap這樣的IoC框架的使用,但我不禁認爲這些「設計模式」只是無稽之談,使代碼變得更加複雜。MVC應用程序中IoC框架的用途是什麼?
讓我從一個例子開始,我認爲IoC有點有用。
我認爲在處理MVC框架中控制器類的實例時,IoC可能是有用的。在這種情況下,我正在考慮.NET MVC框架。
通常,控制器類的實例化由框架處理。所以這意味着你不能將任何參數傳遞給控制器類的構造函數。 這是IoC框架可以派上用場的地方。在IoC容器的某個地方,您可以指定應該實例化哪個類,並在調用控制器類時將其傳遞給控制器constructor
。
當你想單元測試控制器時,這也很方便,因爲你可以模擬傳遞給它的對象。
但就像我說的,我可以理解爲什麼人們想要將它用於他們的控制器類。但除此之外。從那裏你可以簡單地做正常依賴注入。
但是,爲什麼不乾脆像這樣做:
public class SomeController
{
public SomeController() : this(new SomeObj())
{
}
publiv SomeController(SomeObj obj)
{
this.obj = obj;
}
}
現在你不必使用任何第三方IoC框架這也意味着較低的學習曲線。因爲你不必進入該框架的規格。
您仍然可以在單元測試中模擬對象。所以在那裏也沒有問題。
你唯一可以說的是,「但是現在你的班級是緊密耦合到SomeObj
」。 這是真的。但誰在乎!?這是一個控制器類!我永遠不會重複使用這個類。那麼爲什麼我要擔心這種緊密的耦合......?我可以嘲笑傳遞給它的對象。這是唯一重要的事情。
那麼,爲什麼我應該打擾使用IoC?我真的錯過了點...?對我來說,IoC模式只是一些被高估的模式。將更多,更復雜的圖層添加到您的應用程序中...
@HenkHolterman不一定當有人來與一個很好的論點,爲什麼我的做法是錯誤的,在什麼樣的情況。我不打算與任何人爭論。只是在這個問題上尋找建議。 – w00 2013-03-18 16:06:05
[爲什麼需要IoC容器而不是簡單的DI代碼?](http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed -to-直截了當二 - 代碼) – 2013-03-18 16:07:21