我是一名长期的Windows开发人员,在win32和早期的COM上已经开始了.我从2001年开始使用.Net,因此我对C#和CLR非常流利.在我开始参与Stack Overflow之前,我从未听说过Castle Windsor.我已经读过温莎城堡"入门"指南,但它没有点击.
教这个老狗的新技巧,并告诉我为什么我应该将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()
想象一下,你有数百个这样的小类只有一个责任(谷歌SRP)..你在WorkflowStepper中使用了一些:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
试想一下,没有担心的细节EmailSender
时,你正在写WorkflowStepper
或AlertRegistry
您只是担心您正在处理的问题.
想象一下,对象和依赖关系的整个图形(树)在运行时被连接起来,所以当你这样做时:
WorkflowStepper stepper = Container.Get
您可以真正处理WorkflowStepper
所有依赖项,并自动填充您需要它们的位置.
new
它恰好发生 - 因为它知道什么需要什么.
并且您可以通过可测试且可重复的方式使用设计更好的DRY代码来编写更少的缺陷.