Dependency injection 依赖注入框架:我为什么关心?

Dependency injection 依赖注入框架:我为什么关心?,dependency-injection,ninject,c#,Dependency Injection,Ninject,C#,我一遍又一遍地读。我遇到了两个困惑: 手动注入技术我已经很熟悉了,但我不熟悉Ninjection,因此不确定整个程序将如何工作。也许这会有助于提供一个完整的程序,而不是像在那一页上所做的那样,显示一个分解成多个部分的程序 我还是不明白这是怎么让事情变得容易的。我想我错过了一些重要的事情。我可以看出,如果您创建一组注入,然后同时在两个大组之间切换,注入框架将有多大的帮助(这对于模拟非常有用,除其他外),但我认为它还有更多的帮助。但我不确定是什么。或者我只是需要更多的例子来说明为什么这是一个令人兴奋

我一遍又一遍地读。我遇到了两个困惑:

  • 手动注入技术我已经很熟悉了,但我不熟悉Ninjection,因此不确定整个程序将如何工作。也许这会有助于提供一个完整的程序,而不是像在那一页上所做的那样,显示一个分解成多个部分的程序

  • 我还是不明白这是怎么让事情变得容易的。我想我错过了一些重要的事情。我可以看出,如果您创建一组注入,然后同时在两个大组之间切换,注入框架将有多大的帮助(这对于模拟非常有用,除其他外),但我认为它还有更多的帮助。但我不确定是什么。或者我只是需要更多的例子来说明为什么这是一个令人兴奋的话题


  • 使用大多数框架的依赖注入可以在运行时配置,而无需重新编译。

    我非常喜欢某些框架的自动连接功能。。。当您不必关心需要实例化哪些类型时

    编辑:
    我读书。我真的支持他的观点。

    如果您的代码中几乎没有依赖项,那么依赖项注入会变得非常有趣。一些依赖项注入框架允许您在配置文件中定义依赖项。如果您需要一个真正灵活的软件,并且需要在不修改代码的情况下进行更改,那么这将非常有用。例如,工作流软件是这类解决方案的主要候选者。

    它允许您通过模拟特定代码块所需的接口来轻松测试代码。它还允许您在不破坏代码其他部分的情况下轻松交换功能

    这都是关于内聚和耦合的


    你可能看不到小项目的好处,但一旦你通过了小项目,当你不得不对系统进行更改时,它就会变得非常明显。使用DI很容易。

    在没有DI框架的情况下注入依赖项时,应用程序上到处都是箭头代码,告诉类如何构建依赖项

        public Contact()
            : this(new DataGateWay())
        {
        }
    
    但是如果您使用Ninject之类的东西,那么所有的箭头代码都在一个点上,这使得更改所有使用它的类的依赖关系变得更加容易

    internal class ProductionModule : StandardModule
    {
        public override void Load()
        {
            Bind<IDataGateway>().To<DataGateWay>();
        }
    }
    
    内部类ProductionModule:StandardModule
    {
    公共覆盖无效负载()
    {
    绑定()到();
    }
    }
    
    依赖项注入对于。后者允许以更高效、更可靠的方式构建真正复杂的应用程序

    此外,它还允许将常见的横切关注点与其他代码清晰地分开(这将导致更可重用和更灵活的代码库)

    相关链接:

    我还是不明白这是怎么让事情变得容易的。我想我错过了一些重要的事情

    如果我们只需要开发离散的组件,其中每个组件都提供了我们可以轻松理解、重用和维护的独特功能,那不是很好吗。我们只在组件上工作

    阻止我们这样做的是,我们需要一些能够以某种方式将这些组件自动组合和管理到工作应用程序中的基础设施。我们可以使用这样的基础设施——IOC框架


    因此,IOC框架与管理依赖关系、测试或配置无关。相反,它是关于管理复杂性的,使您能够只工作和思考组件。

    您能更详细地解释一下吗?我不认为这是真的:通常可以在部署时对其进行调整;或者一般来说,无需重新编译。我的意思是,连接是在运行时完成的,但它通常仍然是静态的。我仍然不明白为什么您不想手动注入+1来提及内聚和耦合-我认为这是使用依赖注入的核心思想-开发高度内聚但松散耦合的组件。