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

我是一个很长时间的Windows开发者,在win32和早期的COM上已经断绝了我的牙齿。 自2001年以来,我一直在使用.Net,所以我非常stream利地使用C#和CLR。 我从来没有听说过温莎城堡,直到我开始参与堆栈溢出。 我已阅读温莎城堡“入门指南”,但不是点击。

教这个老狗新花样,告诉我为什么我应该把温莎城堡整合到我的企业应用程序中。

温莎城堡是一个反转的控制工具。 还有其他人喜欢它。

它可以给你的对象预先build立和预先连线的依赖关系在那里。 通过reflection和configuration而不是“新”操作符创build的整个对象图。

从这里开始: http : //tech.groups.yahoo.com/group/altdotnet/message/10434


想象一下,你有一个电子邮件发送课程。 EmailSender。 想象一下你有另一个类WorkflowStepper。 在WorkflowStepper内部,你需要使用EmailSender。

你总是可以说new EmailSender().Send(emailMessage);

但是 – new的使用 – 创造了一个难以改变的紧密耦合。 (毕竟,这是一个微不足道的例子)

那么,如果不是在WorkflowStepper中新build这个坏男孩,而是将它传递给了构造函数呢?

那么谁叫它必须新buildEmailSender。

new WorkflowStepper(emailSender).Step()

想象一下,你有成百上千的这些只有一个责任的小类(谷歌SRP)..你在WorkflowStepper中使用其中的一些:

new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()

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

你只是担心你正在处理的关切。

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

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

你得到一个真正的交易WorkflowStepper所有的依赖关系自动填充在你需要他们的地方。

没有new

这只是发生 – 因为它知道什么需要什么。

而且你可以用更好的devise,干燥的代码,以可testing和可重复的方式写出更less的缺陷。

如果你是国际奥委会的一个完整的初学者,那么不要从温莎城堡开始,因为这个文件留下了一些需要和慢的(它使用反思)。

我build议NInject ,因为:

  1. 文件是远远优越的。
  2. 它使用expression式编译/ LCG ,所以它比使用Reflection的Castle Windsor更快(8倍到50倍)。

要开始,请点击“访问Dojo”,然后在GitHub上浏览一系列NInject教程 。

马克•西曼(Mark Seemann)撰写了关于DI(dependency injection)的优秀书籍,这是IOC的一个子集。 他还比较了一些容器。 我不能推荐这本书。 这本书的名字是:“.Net中的dependency injection” https://www.manning.com/books/dependency-injection-in-dotnet

我认为IoC是在提高开发团队(包括PM,BA和BO)生产力和享受的道路上的正确方向的垫脚石。 它有助于build立开发人员之间的分离和testing。 当架构可以进出,允许灵活性时,它会让人放心。

完成IoC(CW或Ninject等)刺探的目标的最好方法是消除政治#1和#2在开发时省去开发人员的误解。 这两个解决scheme似乎没有关系到IoC? 他们是 :)

你可以参考这个链接 。

希望它会帮助你。