首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是温莎城堡,我为什么要关心?

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

Stack Overflow用户
提问于 2008-09-24 01:23:37
回答 5查看 72.8K关注 0票数 198

我是一个长期从事视窗系统开发的人,对win32和早期的COM有着切肤之痛。我从2001年就开始使用.NET了,所以我对C#和CLR非常熟悉。在我开始参与Stack Overflow之前,我从未听说过Castle Windsor。我已经阅读了Castle Windsor“入门”指南,但它不点击。

教这只老狗新的技巧,告诉我为什么我应该将Castle Windsor集成到我的企业应用程序中。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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()

想象一下,在编写WorkflowStepperAlertRegistry时,不用担心EmailSender的细节

你只需要担心你正在处理的问题就行了。

想象一下,对象和依赖关系的整个图(树)在运行时连接在一起,因此当您这样做时:

WorkflowStepper stepper = Container.Get<WorkflowStepper>();

你会得到一个真正的WorkflowStepper,所有的依赖项都会自动填入你需要的地方。

没有new

它就这样发生了--因为它知道什么需要什么。

而且你可以用一种可测试和可重复的方式,用更好的设计,更干的代码来写更少的缺陷。

票数 373
EN

Stack Overflow用户

发布于 2016-08-11 21:00:28

Mark Seemann写了一本关于依赖注入( DI )的优秀书籍,它是IOC的一个子集。他还比较了许多容器。我怎么推荐这本书都不为过。这本书的名字是:“.Net中的依赖注入”https://www.manning.com/books/dependency-injection-in-dot-net

票数 4
EN

Stack Overflow用户

发布于 2015-02-19 02:46:09

我认为IoC是迈向更高生产力和开发团队(包括PM、BA和BOs)的道路上正确方向的垫脚石。它有助于在开发人员和测试之间建立分离的关注点。它在架构时提供了安心,允许灵活性,因为框架可能会进出。

实现IoC目标的最佳方法(CW或Ninject等)尝试是为了消除政治#1和#2,消除开发人员在开发时戴上错误理解的门面的需要。这两个解决方案似乎与IoC无关吗?它们是:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/124871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档