Dependency injection 依赖注入框架:我为什么关心?
我一遍又一遍地读。我遇到了两个困惑:Dependency injection 依赖注入框架:我为什么关心?,dependency-injection,ninject,c#,Dependency Injection,Ninject,C#,我一遍又一遍地读。我遇到了两个困惑: 手动注入技术我已经很熟悉了,但我不熟悉Ninjection,因此不确定整个程序将如何工作。也许这会有助于提供一个完整的程序,而不是像在那一页上所做的那样,显示一个分解成多个部分的程序 我还是不明白这是怎么让事情变得容易的。我想我错过了一些重要的事情。我可以看出,如果您创建一组注入,然后同时在两个大组之间切换,注入框架将有多大的帮助(这对于模拟非常有用,除其他外),但我认为它还有更多的帮助。但我不确定是什么。或者我只是需要更多的例子来说明为什么这是一个令人兴奋
使用大多数框架的依赖注入可以在运行时配置,而无需重新编译。我非常喜欢某些框架的自动连接功能。。。当您不必关心需要实例化哪些类型时 编辑:
我读书。我真的支持他的观点。如果您的代码中几乎没有依赖项,那么依赖项注入会变得非常有趣。一些依赖项注入框架允许您在配置文件中定义依赖项。如果您需要一个真正灵活的软件,并且需要在不修改代码的情况下进行更改,那么这将非常有用。例如,工作流软件是这类解决方案的主要候选者。它允许您通过模拟特定代码块所需的接口来轻松测试代码。它还允许您在不破坏代码其他部分的情况下轻松交换功能 这都是关于内聚和耦合的
你可能看不到小项目的好处,但一旦你通过了小项目,当你不得不对系统进行更改时,它就会变得非常明显。使用DI很容易。在没有DI框架的情况下注入依赖项时,应用程序上到处都是箭头代码,告诉类如何构建依赖项
public Contact()
: this(new DataGateWay())
{
}
但是如果您使用Ninject之类的东西,那么所有的箭头代码都在一个点上,这使得更改所有使用它的类的依赖关系变得更加容易
internal class ProductionModule : StandardModule
{
public override void Load()
{
Bind<IDataGateway>().To<DataGateWay>();
}
}
内部类ProductionModule:StandardModule
{
公共覆盖无效负载()
{
绑定()到();
}
}
依赖项注入对于。后者允许以更高效、更可靠的方式构建真正复杂的应用程序
此外,它还允许将常见的横切关注点与其他代码清晰地分开(这将导致更可重用和更灵活的代码库)
相关链接:
因此,IOC框架与管理依赖关系、测试或配置无关。相反,它是关于管理复杂性的,使您能够只工作和思考组件。您能更详细地解释一下吗?我不认为这是真的:通常可以在部署时对其进行调整;或者一般来说,无需重新编译。我的意思是,连接是在运行时完成的,但它通常仍然是静态的。我仍然不明白为什么您不想手动注入+1来提及内聚和耦合-我认为这是使用依赖注入的核心思想-开发高度内聚但松散耦合的组件。