用.net反转控制

我很少听到有人使用.Net 控制反转(Ioc)原理。 我有一些使用Java的朋友在Spring和PicoContainer中使用了更多的Ioc。

我理解从代码中删除依赖关系的原则……但我怀疑它是否更好。

为什么.Net程序员不使用(或使用更少)这些类型的框架? 如果你这样做,从长远来看,你真的发现了积极的影响吗?

很多人在.NET中使用IOC,有几个框架可以帮助使用IoC。 你可能会在WinForms方面看到它少,因为当你在Visual Studio中设计表单时让容器连接所有东西更难,但我可以说,对于服务器端的.NET应用程序,我至少在那里工作,IoC非常成功。

为什么在.NET中使用它? 出于同样的原因,你可以在其他地方使用它。 我最喜欢的两件事是:

  • 设计IoC往往会强制执行良好的编码实践 – 设计接口,低耦合,高内聚。 这也导致了非常容易进行unit testing的类。
  • 通常可以在不重新编译的情况下更改系统配置。

其他一些post讨论了.NET可用的不同IoC / DI框架:

  • 哪个C#/ .netdependency injection框架值得研究?
  • 我应该使用哪种dependency injection工具?

我使用StructureMap进行dependency injection,并且最近才开始使用它与iBATIS.NET在运行时注入我们的域对象映射器(而不是通过XML配置文件,不,谢谢!)。

我看到了直接的好处。 为我们所有的映射器(例如IPersonMapper )创建接口,然后添加Moq,这使我能够快速,轻松地编写一些非常好的无数据库unit testing。

以前(.NET 1.0)我编写自己的插件系统主要是为了学习reflection。 从那时起,我在我的项目中实现了某种IoC。 直到最近我才开始使用IoC来进行unit testing,这样写起来就不那么痛苦了。 我无法想象在这一点上做任何其他方式。

直到现在,IoC在.Net中并不常见。 它与微软以及他们所做的推广活动有关。 到目前为止,他们更加强调VS的RADfunction,同时忘记推广像IoC和Di这样的东西,但现在他们有自己的框架,称为Unity,以及他们在ASP.Net MVC上所做的工作。

所以我猜大多数人都会开始使用这样的东西。 因为知道他们有MS替代品可以使用。

我使用StructureMap。

它越来越普遍了。 我目前的项目使用Spring,而在我之前的项目中,我们使用的是Castle Windsor。

现在我想使用’约定优于配置’的想法,以防止所有那些复杂的XML声明。

关于IoC .NET的使用有很多相关的理论。 我认为有相当数量的开发人员没有该领域的经验。 他们不是来自Java背景。 它们来自经典ASP和VB6背景。 此外,微软直到最近才真正推广使用IoC。

此外,使用IoC假设了几件事。 首先,你必须了解它的用途以及你从中得到的东西。 其次,您必须开发代码,以便实际使用IoC容器。

IoC不仅仅是使用工具箱中的其他项目。 这是关于知道如何使用,知道何时使用它以及成熟为开发人员。

因为它与.NET有关,我有几个IoC容器。 我使用过Windsor,StructureMap,Unity以及最近的Ninject。 但请记住,我还没有在实际应用程序中使用它们。 我喜欢到处玩,看看那里发生了什么。 我发现IoC容器.NET的市场非常好。

我使用它来允许我的unit testing替换上游依赖对象的模拟类(模拟实际生产类),以便我的unit testing真正只执行和测试一个类中的代码。它们被编写为测试。

试试LinFu.IOC 2.0:

http://www.codeproject.com/KB/cs/LinFu_IOC.aspx

它是最灵活的IOC容器之一,和Ninject一样,没有要维护的XML文件。 然而,与Ninject不同,LinFu不会强迫您编写任何绑定代码来将依赖关系连接在一起。 看一看! 🙂