编写您自己的IOC容器

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

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

我喜欢Ken Egozi的这款33线容器实现,灵感来自Ayende的15衬里

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

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

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

如果您需要/想要删除对任何这些IoC容器的依赖性,您可以尝试使用Common Service Locator接口。

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

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

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

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

Autofac很棒。

我用不到15行写了一篇。 只是两个扩展方法到字典。

Ayende还写了一篇关于在他的博客文章中用15行代码构建一个IoC容器的文章。我相信他和其他人一样有意见:如果你不需要,不要建立自己的。

我创建了自己的IoC容器,可以更轻松地调试对象的创建(即使您无法访问容器代码)。 创建对象时,按步骤(F11),您将看到创建对象的代码。 完整的代码可以在这里看到。

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

真正的问题是为什么以及另一个新的IOC容器框架能带来哪些好处?

在大多数情况下,您认为您需要更高的性能? 不存在的function? 但是大多数时候,现有的框架正是你需要的,而且足够了,除非你已经意识到框架迫使你去做所有使用它的废话。

ioc容器框架的所有实现都具有令人失望的力量,它具有反模式的顺序,但也有古怪和不可靠的语法,并且在强加耦合的情况下更糟糕,我决定自己去体验它。 这就是我将自己的(非常轻的)IOC容器作为开源的原因。

你可以在这里查看: Puresharp API .net 4.5.2+