什么是温莎城堡,为什么我要关心?
我是Windows的长期开发人员,对win32和早期的COM感兴趣。自2001年以来我一直在使用.Net,所以我在Cand CLR方面非常流利。在开始参与Stack Overflow之前,我从未听说过温莎城堡。我已经阅读了温莎城堡的"入门"指南,但没有点击。
教这只老狗新的花样,并告诉我为什么我应该将Castle Windsor集成到我的企业应用程序中。
解决方案
温莎城堡是控制工具的一种反转。还有其他喜欢它的人。
它可以为我们提供带有预先构建和预先连接的依赖关系的对象。通过反射和配置而不是" new"运算符创建的整个对象图。
从这里开始:http://tech.groups.yahoo.com/group/altdotnet/message/10434
假设我们有一个电子邮件发送课程。电子邮件发件人。假设我们还有另一个类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",所有依赖项会自动填充到我们需要它们的位置。
没有"新的"
它之所以发生,是因为它知道什么需要什么。
而且,我们可以通过可测试且可重复的方式使用经过更好设计的DRY代码编写更少的缺陷。