依赖注入框架对你有什么作用?

4
我理解依赖注入的基本概念。与其有很多全局状态,你可以将需要的内容传递给各种对象的构造函数。
但是我不明白这个概念如何应用到框架中?依赖注入框架为您做了什么,何时应该使用它?
5个回答

5

该框架会根据某种配置(无论是代码、XML文件等)自动连接所有组件。

它基本上就像管道一样。

许多DI框架还包括面向方面的编程、对象生命周期管理等功能,但DI的基础是让您的应用程序运行并使对象相互交流。

换句话说,DI框架是调用构造函数并在完成时告诉整个系统运行的那部分代码 :)


@Jon Skeet,但是为什么我不会自己调用那些构造函数呢?我想我没有理解这种间接性的好处。如果我创建一个带有一些简单类的程序,并创建实例将其传递给其他对象,那么 DI 怎么比我通常自己做更容易呢? - KingNestor
代码并不总是表达这个问题的最简单方式 - 即使你使用代码(例如使用Guice),你也经常只需表达一次:“当我想要一个认证器时,无论它在哪里,都使用<这个>。” - Jon Skeet

1
我主要使用它的原因是,它允许我插入一个对象的新实现而无需重新编译。我只需要更改配置文件,我的对象就能正确地连接在一起。

0

使用DI / IOC的主要优点之一是减少不同类之间的耦合。

当您使用该方法时,必须配置对象层次结构,以表达您从其代码中删除的依赖项。这可能会变成大量的代码。即使您使用DI框架的代码部分,也可以通过让您以更具表现力的方式进行配置来大大减少配置量:

  • 每当需要ILogger时,请使用FileLogger。
  • 您甚至可以通过约定进一步进行, 每当请求I [Name] Controller时, 请将其替换为[Name] Controller。
  • 您可以让它为您管理单例对象。 因此,您的代码与任何其他依赖项的代码相同, 但DI确保您始终获得相同的实例

我使用的一些StructureMap配置:

    ForRequestedType<ILogger>().TheDefaultIsConcreteType<NLogLogger>();
    //the following injects any property that has a type 
    //that implements IController. (overcomes a regular asp.net limitation with DI)
    SetAllProperties(
         p => p.TypeMatches(t => t.IsConcreteAndAssignableTo(typeof(IController)))
    );

0

了解它们有什么用的最好方法是尝试一下。我一直想试试Spring.NET,它看起来是一个很好的实现。


0

关于AOP,我真正喜欢的一件事情是它非常容易在开发和生产版本之间切换。您可以创建非常详细的日志记录,然后基本上翻转一个XML开关,它就消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接