用.net反转控制

时间:2008-10-30 14:56:00

标签: c# .net dependency-injection inversion-of-control

我很少听到有人使用Inversion of Control (Ioc)原则和.Net。我有一些使用Java的朋友在Spring和PicoContainer中使用了更多的Ioc。

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

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

7 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

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

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

我使用StructureMap。

答案 3 :(得分:1)

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

现在我想使用'约定优于配置'的想法来阻止所有那些复杂的XML声明。

答案 4 :(得分:1)

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

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

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

试试LinFu.IOC 2.0:

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

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