30

有没有人用 C# 编写过自己的 IOC 容器?还是绝大多数人都使用各种框架,例如 Spring。各自的优缺点是什么?

4

12 回答 12

17

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

于 2008-12-22T16:11:24.167 回答
7

我喜欢Ken Egozi 的这个 33 行容器实现,灵感来自 Ayende 的 15 班轮

于 2009-11-12T11:31:06.930 回答
4

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

它是开源的,因此您可以获取代码并看看这个人是如何做到的。

于 2008-12-22T15:49:21.683 回答
2

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

于 2010-08-05T20:46:51.093 回答
2

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

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

于 2008-12-22T16:25:56.163 回答
2

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

于 2010-09-14T05:34:45.543 回答
1

James Kovacs 在这里展示了关于这个主题的 dnrTV 剧集。这里还写了一篇文章。然而,在文章中,他提到您可能想要使用其中一个预建的。因为它们有很多不同的外观。Ninject、StructureMap、Autofac 使用流畅的接口。Spring、Castle Windsor 和 Unity 更多地是 XML 配置驱动的。Castle Windsor 也可以使用 boo 作为界面。许多人都与其他框架挂钩,例如 Unity 与 EntLib 或 Castle Windsor 与 Monorail 以及 Castle Project 的其余部分。

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

于 2008-12-23T14:23:09.670 回答
1

Autofac非常好。

我自己用不到 15 行写了一个。字典只有两种扩展方法。

于 2010-09-14T05:40:18.553 回答
1

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

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

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

对 ioc 容器框架的所有实现感到失望,它具有反模式级别的功能,但也有古怪和不可靠的语法,更糟糕的是强加耦合,我决定亲自体验一下。这就是为什么我将自己的(非常轻的)IOC 容器作为开源的。

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

于 2018-08-15T18:14:31.473 回答
0

Ayende还在他的博客文章《用 15 行代码构建 IoC 容器》中写到了关于编写自己的 IoC 容器的内容,但我相信他和其他人的观点相同:如果没有必要,不要构建自己的容器。

于 2008-12-23T14:31:22.057 回答
0

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

于 2014-02-17T19:45:51.710 回答
0

问题是有太多的 IoC 和 DI 库让你感到困惑。当您使用其中一个开发某些东西并且您成长时,您会将您的产品与此类工具紧密结合,您将需要这些工具的专家来继续开发。这完全取决于公司的政治和设计的复杂性。

我自己计划手动完成,因此没有太多隐藏代码。我知道有很多很棒的开源 IoC 工具,但谁真正通过代码并试图理解?

不是要重新发明轮子,但有时如果您可以自己定制更适合您的产品的轮子,那会很好。

于 2020-06-26T07:06:14.610 回答