Answers:
温莎城堡是控制工具的一种反转。还有其他喜欢它的人。
它可以为您提供具有预先构建和预先连接的依赖关系的对象。 通过反射和配置而不是“ new”运算符创建的整个对象图。
从这里开始:http : //tech.groups.yahoo.com/group/altdotnet/message/10434
假设您有一个电子邮件发送课程。EmailSender。假设您还有另一个类WorkflowStepper。在WorkflowStepper内部,您需要使用EmailSender。
你总是可以说 new EmailSender().Send(emailMessage);
但是-使用new
-会创建很难更改的紧密耦合。(毕竟这是一个很小的人为的例子)
那么,如果您只是将它传递到构造函数中,而不是在WorkflowStepper中更新这个坏男孩怎么办?
因此,无论谁打电话给它,都必须重新安装EmailSender。
new WorkflowStepper(emailSender).Step()
想象一下,您有数百个只有一个职责的小类(google SRP)..而您在WorkflowStepper中使用了其中几个:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
想象一下,不用担心EmailSender
写作WorkflowStepper
或写作时的细节。AlertRegistry
您只需要担心正在处理的问题。
想象一下,对象和依赖关系的整个图(树)在运行时连接起来,因此当您执行以下操作时:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
您可以WorkflowStepper
在需要的地方自动填写所有依赖项,从而真正解决问题。
new
它只是发生 -因为它知道什么需要什么。
而且,您可以以可测试和可重复的方式使用经过更好设计的DRY代码编写更少的缺陷。
new
,我知道那时一切都在哪里。我也不喜欢使用反射的想法,它实际上是一个黑匣子,我们不拥有代码,因此无法完全理解。
马克·西曼(Mark Seemann)撰写了关于DI(依赖注入)的优秀著作,这是IOC的子集。他还比较了多个容器。我对这本书的推荐不够。本书的名称是:“ .NET中的依赖注入” https://www.manning.com/books/dependency-injection-in-dot-net
温莎城堡是Dependency Injection container.
它的意思是,有了它,您可以注入依赖项并使用它们,而无需借助new关键字创建它们。例如,假设您已经编写了一个存储库或服务,并且希望在许多地方使用它,则需要先注册您的服务/存储库,然后将其注入所需的位置后才能开始使用它。您可以看一下下面的教程,我学习了温莎城堡。
链接。
希望对您有帮助。