我是一个长期从事视窗系统开发的人,对win32和早期的COM有着切肤之痛。我从2001年就开始使用.NET了,所以我对C#和CLR非常熟悉。在我开始参与Stack Overflow之前,我从未听说过Castle Windsor。我已经阅读了Castle Windsor“入门”指南,但它不点击。
教这只老狗新的技巧,告诉我为什么我应该将Castle Windsor集成到我的企业应用程序中。
发布于 2008-09-24 01:31:16
Castle Windsor是一个反转控制工具。还有其他类似的。
它可以为您提供具有预构建和预连线依赖关系的对象。新建通过反射和配置而不是“”运算符创建的整个对象图。
从这里开始: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()
想象一下,在编写WorkflowStepper或AlertRegistry时,不用担心EmailSender的细节
你只需要担心你正在处理的问题就行了。
想象一下,对象和依赖关系的整个图(树)在运行时连接在一起,因此当您这样做时:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
你会得到一个真正的WorkflowStepper,所有的依赖项都会自动填入你需要的地方。
没有new
它就这样发生了--因为它知道什么需要什么。
而且你可以用一种可测试和可重复的方式,用更好的设计,更干的代码来写更少的缺陷。
发布于 2016-08-11 21:00:28
Mark Seemann写了一本关于依赖注入( DI )的优秀书籍,它是IOC的一个子集。他还比较了许多容器。我怎么推荐这本书都不为过。这本书的名字是:“.Net中的依赖注入”https://www.manning.com/books/dependency-injection-in-dot-net
发布于 2015-02-19 02:46:09
我认为IoC是迈向更高生产力和开发团队(包括PM、BA和BOs)的道路上正确方向的垫脚石。它有助于在开发人员和测试之间建立分离的关注点。它在架构时提供了安心,允许灵活性,因为框架可能会进出。
实现IoC目标的最佳方法(CW或Ninject等)尝试是为了消除政治#1和#2,消除开发人员在开发时戴上错误理解的门面的需要。这两个解决方案似乎与IoC无关吗?它们是:)
https://stackoverflow.com/questions/124871
复制相似问题