6

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

我了解从您的代码中删除依赖项的原则......但我怀疑它是否更好。

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

4

7 回答 7

6

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

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

  • 为 IoC 进行设计倾向于强制执行良好的编码实践——针对接口进行设计、低耦合、高内聚。这也导致了非常容易进行单元测试的类。
  • 系统配置通常可以在不重新编译的情况下更改。

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

于 2008-10-30T15:01:57.413 回答
4

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

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

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

于 2008-10-30T15:03:05.303 回答
2

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

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

我使用结构图。

于 2008-10-30T15:05:58.950 回答
1

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

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

于 2008-10-30T15:09:16.493 回答
1

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

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

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

因为它与 .NET 相关,所以我有几个 IoC 容器。我用过 Windsor、StructureMap、Unity,最近还用过 Ninject。但请记住,我还没有在实际应用程序中使用所有这些。我喜欢到处玩耍,看看外面发生了什么。我发现 IoC 容器 .NET 的市场相当不错。

于 2008-10-30T15:13:21.993 回答
0

我使用它来允许我的单元测试用 Mock Classes(模拟实际的生产类)代替上游依赖对象,这样我的单元测试实际上只执行和测试一个 class.method 中的代码,它们被编写来测试。

于 2008-10-30T17:46:16.210 回答
0

试试 LinFu.IOC 2.0:

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

它是目前最灵活的 IOC 容器之一,并且与 Ninject 一样,无需维护 XML 文件。然而,与 Ninject 不同的是,LinFu 不会强迫您编写任何绑定代码来将您的依赖项连接在一起。看一看!:)

于 2008-12-18T09:15:56.820 回答