当前位置:  开发笔记 > 编程语言 > 正文

什么是温莎城堡,我为什么要关心?

如何解决《什么是温莎城堡,我为什么要关心?》经验,为你挑选了1个好方法。

我是一名长期的Windows开发人员,在win32和早期的COM上已经开始了.我从2001年开始使用.Net,因此我对C#和CLR非常流利.在我开始参与Stack Overflow之前,我从未听说过Castle Windsor.我已经读过温莎城堡"入门"指南,但它没有点击.

教这个老狗的新技巧,并告诉我为什么我应该将Castle Windsor整合到我的企业应用程序中.



1> Matt Hinze..:

温莎城堡是一种控制工具的倒置.还有其他人喜欢它.

它可以为您提供具有预构建和预先连线依赖性的对象. 通过反射和配置而不是"新"运算符创建的整个对象图.

从这里开始: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时,你正在写WorkflowStepperAlertRegistry

您只是担心您正在处理的问题.

想象一下,对象和依赖关系的整个图形(树)在运行时被连接起来,所以当你这样做时:

WorkflowStepper stepper = Container.Get();

您可以真正处理WorkflowStepper所有依赖项,并自动填充您需要它们的位置.

没有 new

它恰好发生 - 因为它知道什么需要什么.

并且您可以通过可测试且可重复的方式使用设计更好的DRY代码来编写更少的缺陷.


真棒!写得好!现在我很兴奋.
并帮助Java人员:这是Guice for .NET ;-)
我发现根据我的经验,调试起来比较困难,因为对象初始化在哪里? - 在大型项目中很难找到初始化的根.我更喜欢使用'new`的老式方法,我知道那时候的一切都在哪里.我也不喜欢使用反射的想法,它实际上是一个黑盒子,我们不拥有的代码,因此不完全理解.
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有