使用.NET的控制反转

6
很少听到有人在.Net中使用控制反转(Ioc)原则。我有一些朋友在Java中使用Spring和PicoContainer等框架更多地使用Ioc。
我理解从代码中移除依赖的原则...但我怀疑它是否真的更好。
为什么.Net程序员不使用(或使用较少)这些类型的框架?如果您使用,长期来看确实会产生积极的影响吗?

只需在谷歌上搜索“Alt.net” - 你会发现很多人在使用 .net 中的 IOC。微软甚至有自己的 IOC 框架,比如 Unity。 - Jeff Schumacher
7个回答

6
许多人在.NET中使用IOC,并且有几个框架可用于帮助使用IoC。您可能会在WinForms方面看到它的使用较少,因为当您在Visual Studio中设计表单时很难让容器将所有内容连接在一起,但是我可以说,在至少我工作的服务器端.NET应用程序中,IoC被非常成功地使用。
为什么在.NET中使用它?出于与在其他任何地方使用它的相同原因。我喜欢的两个最大的优点是:
- 设计IoC倾向于强制执行良好的编码实践-设计接口、低耦合、高内聚。这也导致类非常易于进行单元测试。 - 系统配置通常可以在不重新编译的情况下更改。
一些其他帖子讨论了可用于.NET的不同IoC / DI框架:
- 值得考虑的哪些C#/.net依赖注入框架? - 我应该使用哪个依赖注入工具?

4

我使用StructureMap进行依赖注入,并最近才开始将其与iBATIS.NET一起使用,以在运行时注入我们的领域对象映射器(而不是通过XML配置文件,不需要感谢!)。

我看到了立竿见影的好处。为所有映射器(例如IPersonMapper)创建接口,然后添加Moq,可以让我快速轻松地编写一些非常好的无数据库单元测试。

以前(.NET 1.0),我编写了自己的插件系统,主要是为了学习反射。从那时起,我在我的项目中实现了某种IoC。直到最近,我才开始使用IoC使编写单元测试变得更加轻松。此时我无法想象还有其他的方式来完成这项工作。


2

直到现在,IoC在.Net中并不是很普遍。这与微软及其宣传活动有关。直到现在,他们更加强调VS的RAD功能,而在同时却忘记了推广像IoC和Di这样的东西。但现在他们有了自己的框架,叫做Unity,并且他们在ASP.Net MVC上所做的工作也很值得一提。

所以我猜大多数人会开始使用这样的东西。因为现在他们有了MS的替代品可供选择。

而我使用的是StructureMap。


1

这种情况越来越普遍了。我的当前项目使用Spring,而在之前的项目中我们使用了Castle Windsor。

现在我想使用“约定优于配置”的思想,以避免所有那些复杂的XML声明。


1

关于使用IoC .NET,有许多理论。我认为有很多开发者在这个领域没有经验。他们不是从Java背景中来的,而是来自传统的ASP和VB6背景。此外,微软直到最近才真正推广使用IoC。

此外,使用IoC需要假设一些事情。首先,你必须理解它的用途以及你从中得到了什么。其次,你必须编写代码,以便可以实际使用IoC容器。

IoC不仅仅是在工具箱中使用另一个项目。它是关于知道如何使用,知道何时使用它并成熟为一名开发者。

就.NET而言,我使用过几个IoC容器。我用过Windsor、StructureMap、Unity,最近使用的是Ninject。请记住,我并没有在实际应用程序中使用它们全部。我喜欢玩,看看市场上的新动向。我发现,.NET的IoC容器市场非常好。


0

尝试使用LinFu.IOC 2.0:

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

它是最灵活的IOC容器之一,就像Ninject一样,没有需要维护的XML文件。然而,与Ninject不同的是,LinFu不强制您编写任何绑定代码来连接您的依赖项。快来看看吧!:)


0
我使用它来允许我的单元测试替换模拟类(模拟实际的生产类)以代替上游依赖对象,这样我的单元测试就真正只执行和测试编写用于测试的一个类/方法中的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接