我是一名长期的 Windows 开发人员,对 win32 和早期的 COM 有过初步了解。自 2001 年以来,我一直在使用 .NET,因此我非常精通 C# 和 CLR。在我开始参加 之前,我从未听说过温莎城堡。我已经阅读了温莎城堡的“入门”指南,但没有点击。
教这条老狗新技巧,并告诉我为什么要将 Castle Windsor 集成到我的企业应用程序中。
Castle Windsor 是一种反转控制工具。还有其他人喜欢它。
它可以为您提供具有预构建和预连接依赖项的对象。 通过反射和配置而不是“新”运算符创建的整个对象图。
从这里开始:http: //tech.groups.yahoo.com/group/altdotnet/message/10434
假设您有一个电子邮件发送课程。电子邮件发件人。假设您有另一个类 WorkflowStepper。在 WorkflowStepper 中,您需要使用 EmailSender。
你总是可以说new EmailSender().Send(emailMessage);
new EmailSender().Send(emailMessage);
但这 - 使用new- 会产生难以改变的紧密耦合。(毕竟这是一个小小的人为的例子)
new
那么,如果不是在 WorkflowStepper 中新建这个坏男孩,而是将它传递给构造函数呢?
因此,无论谁调用它,都必须更新 EmailSender。
new WorkflowStepper(emailSender).Step()
想象一下,您有数百个只有一个职责的小类(google SRP)..您在 WorkflowStepper 中使用了其中的一些:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
想象一下,不用担心EmailSender写作时的细节WorkflowStepper或AlertRegistry
EmailSender
WorkflowStepper
AlertRegistry
你只是担心你正在处理的问题。
想象一下整个对象和依赖关系图(树)在运行时连接起来,所以当你这样做时:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
您可以真正处理WorkflowStepper在需要它们的地方自动填充的所有依赖项。
它只是 发生 了——因为它知道什么需要什么。
您可以使用设计更好的 DRY 代码以可测试和可重复的方式编写更少的缺陷。