【问题标题】:What does a Dependency Injection framework do for you?依赖注入框架能为您做什么?
【发布时间】:2009-03-19 20:34:52
【问题描述】:

我了解Dependency Injection 的基本概念。与其拥有大量全局状态,不如将所需内容传递给各种对象的构造函数。

但我不明白这个概念如何应用于框架?依赖注入框架能为您做什么,什么时候应该使用?

【问题讨论】:

    标签: dependency-injection frameworks


    【解决方案1】:

    该框架会根据某种配置(无论是代码、XML 文件等)为您连接一切。

    基本上是管道。

    许多 DI 框架还包括面向方面的编程、对象生命周期管理等,但 DI 的基础是让您的应用程序启动并运行,对象之间相互通信。

    另一种说法:DI 框架是一段代码,它调用构造函数并告诉整个事情在完成后运行:)

    【讨论】:

    • @Jon Skeet,但我为什么不自己调用这些构造函数呢?我想我不明白间接的好处。如果我用一些简单的类创建一个程序并创建它们传递其他对象的实例,那么 DI 如何使这比我自己正常做更容易?
    • 代码并不总是表达这一点的最简单方式——即使您确实使用代码(例如使用 Guice),您通常也只能表达一次:“当我想要一个验证器,无论它在哪里,都使用 。"
    【解决方案2】:

    我使用它的主要目的是让我无需重新编译即可插入对象的新实现。我只需更改一个配置文件,我的对象就会正确连接在一起。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          当您使用该方法时,您必须配置对象的层次结构,这些层次结构表达了您从它们的代码中取出的依赖关系。这可以变成很多代码。即使你使用 DI 框架的代码部分,它也可以让你以更具表现力的方式进行配置,从而大大减少配置量:

          • 只要需要 ILogger,请使用 文件记录器。
          • 你可以走得更远 约定,无论何时
            I[Name] 请求控制器
            将其替换为 [Name]Controller。
          • 你可以让它管理单例 给你的对象。所以你的代码是 与任何其他相同
            依赖,但 DI 确保 你得到相同的实例 时间

          我使用的几个结构图配置:

              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)))
              );
          

          【讨论】:

            猜你喜欢
            • 2011-05-16
            • 1970-01-01
            • 2014-09-06
            • 2017-08-31
            • 2010-12-31
            • 2010-09-14
            • 1970-01-01
            • 2015-05-08
            • 2021-01-07
            相关资源
            最近更新 更多