我试图理解像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