我正在尝试理解像StructureMap这样的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模式只是一种被高估的模式。给你的应用程序添加更多复杂的层...