编写您自己的IOC容器

时间:2008-12-22 15:34:56

标签: c# inversion-of-control ioc-container

有没有人在C#中写过自己的IOC容器?或者绝大多数人都使用各种框架,如Spring。每个人的专业和意见是什么?

12 个答案:

答案 0 :(得分:15)

编写自己的练习是一个很好的练习,但最后你可能想要使用现有的容器。您可以从15行代码中的one开始。

答案 1 :(得分:6)

答案 2 :(得分:4)

有人用C#编写了一个:http://ninject.org/

它是开源的,所以你可以获得代码并看看这个人是如何做到的。

答案 3 :(得分:2)

除非有一个很好的理由我不会重新发明轮子并自己实现IoC容器,特别是因为有很多好的选项,如Unity,Ninject或Spring.net

如果您需要/想要删除对这些IoC容器中的任何一个的依赖关系,您可以试用Common Service Locator接口。

答案 4 :(得分:2)

我在c#中编写了一个实现公共服务定位器的IoC / DI容器。我写它主要是为了学习目的,但是当我完成它时,我决定将它作为开源。如果您有任何人想试用IInject,可以下载here

答案 5 :(得分:2)

如果您正在寻找轻量级和&高性能IoC容器,那么你应该看看Munq

答案 6 :(得分:1)

詹姆斯·科瓦奇(James Kovacs)就此主题发表了一部dnrTV剧集here。这里还写了an article。然而,在文章中他提到你可能想要使用其中一个预制的。因为它们有许多不同的外观。 Ninject,StructureMap,Autofac使用流畅的界面。 Spring,Castle Windsor和Unity更受XML配置驱动。 Castle Windsor也可以使用boo作为界面。许多人都有其他框架的钩子,例如Unity to EntLib或Castle Windsor到Monorail以及城堡项目的其余部分。

因此,除非您确实需要或想要IOC框架未提供的内容,否则为什么不使用其中之一。

答案 7 :(得分:1)

Autofac很棒。

我自己用少于15行编写了一个。只是两个扩展方法到字典。

答案 8 :(得分:0)

Ayende还写了关于在他的博客文章Building an IoC container in 15 lines of code中编写自己的IoC容器的文章,我相信他和其他人一样有这样的看法:如果你没有自己的话,不要建立自己的到。

答案 9 :(得分:0)

我创建了自己的IoC容器,使更容易调试创建对象(即使您无法访问容器代码)。创建对象时,按Step(F11)时,您会看到创建对象的代码。完整代码可以看here

答案 10 :(得分:0)

IOC容器并不难编写,它只是一个管理良好的全局递归工厂,具有一些潜在的附加功能。 使用字典,反射和委托来注册和构建一个简单的容器...

真正的问题是为什么另一个新的IOC容器框架以及如何带来收益?

在大多数情况下,您认为您需要更高的性能?不存在的功能?但是大多数时候,除非您已经意识到所有强迫该框架使用它的废话,否则现有框架正是您所需要和足够的。

被ioc容器框架的所有实现失望的力量具有与反模式相似的功能,但语法又古怪又不可靠,而且在施加耦合方面更差,我决定亲自体验一下。这就是为什么我将自己的(非常轻巧)的IOC容器作为开放源代码。

您可以在此处进行检查:Puresharp API .net 4.5.2+

答案 11 :(得分:0)

问题是,有太多IoC和DI库让您感到困惑。当您使用其中一种进行开发并发展壮大时,您会将产品与此类工具紧密结合在一起,并且您将需要其中的专家来继续开发。这全都与公司的政策和设计的复杂性有关。

我本人计划手动执行此操作,因此没有太多隐藏的代码。我知道有很多很棒的开源IoC工具,但实际上是谁看过代码并试图理解的?

与重新发明轮子无关,但是有时候,如果您可以自己定制一个更适合您产品的自定义轮子,那就很好了。