我很少听到有人使用Inversion of Control (Ioc)原则和.Net。我有一些使用Java的朋友在Spring和PicoContainer中使用了更多的Ioc。
我理解从代码中删除依赖关系的原则......但我怀疑它是否更好。
为什么.Net程序员不使用(或使用更少)这些类型的框架?如果你这样做,从长远来看,你真的发现了积极的影响吗?
答案 0 :(得分:6)
很多人在.NET中使用IOC,有几个框架可以帮助使用IoC。你可能会在WinForms方面看到它少,因为当你在Visual Studio中设计表单时让容器连接所有东西更难,但我可以说,对于服务器端.NET应用程序,我至少在那里工作,IoC非常成功。
为什么在.NET中使用它?出于同样的原因,你可以在其他地方使用它。我最喜欢的两件事是:
其他一些帖子讨论了.NET可用的不同IoC / DI框架:
答案 1 :(得分:4)
我使用StructureMap进行依赖注入,并且最近才开始使用它iBATIS.NET在运行时注入我们的域对象映射器(并且不通过XML配置文件,不,谢谢!)。
我看到了直接的好处。为我们的所有映射器(例如IPersonMapper
)创建接口,然后添加Moq,这使我能够快速,轻松地编写一些非常好的无数据库单元测试。
以前(.NET 1.0)我编写自己的插件系统主要是为了学习反射。从那时起,我在我的项目中实现了某种IoC。直到最近我才开始使用IoC来进行单元测试,这样写起来就不那么痛苦了。我无法想象在这一点上做任何其他方式。
答案 2 :(得分:2)
所以我猜大多数人都会开始使用这样的东西。因为知道他们有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不会强迫您编写任何绑定代码来将依赖关系连接在一起。看一看! :)