什么是在MVC应用程序中使用IoC框架的? [关闭](What is the use of an

2019-08-17 17:42发布

我想了解使用像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模式只是一些被高估的格局。 添加更多的,复杂的层到应用程序...

Answer 1:

你问一个很好的问题,在你的榜样,我会说一个IoC会/可能是矫枉过正,但只考虑你的代码扩展到下面,然后你可能会开始看到有一个IoC做这一切为你的利益。

public class SomeController
{
    public SomeController() : this( new SomeObj(new configuration(), new SomethingElse(new SomethingElseToo())) ) 
    {
    }

    publiv SomeController(SomeObj obj)
    {
        this.obj = obj;
    }
}


Answer 2:

有多种事物的IoC容器可以为你做。

最明显的一个是提供的依赖关系的实施,这是有道理的其他地方,不只是在控制器-如果你决定更换SomeObjSomeObj2 ,你可以做在一个地方,而不是57位。

另外一个是处理生命周期的担忧,即你可以指定一个对象(单身,每个线程,每个请求,短暂...)的范围。

此外,IoC容器可以设置您的可选依赖(即财产注射),这比写这个简单:

var svc = new Service(new MyRepository())
svc.Logger = logger;
svc.XY = xy

这里说所有的好理由: 为什么我需要一个IoC容器,而不是简单的DI代码?



Answer 3:

但谁在乎!? 这是一个控制器类! 我不打算重用班级,曾..

这是一个好点,但考虑到清洁是怎样的代码,如果你有嵌套的相关,具有不同的生命周期 。 例如,你可以有一些应用程序级别的单,这需要“每个请求”等东西。 在国际奥委会做出只是你的代码更加清晰,并且很容易修改。



文章来源: What is the use of an IoC framework in an MVC application? [closed]