【问题标题】:Code your own IOC Container编写自己的 IOC 容器
【发布时间】:2010-09-28 01:02:16
【问题描述】:

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

【问题讨论】:

  • charkit:我认为这个问题本身就与平台无关。有些平台可能会强迫你写一个,因为他们没有现成的,但除此之外......

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


【解决方案1】:

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

【讨论】:

【解决方案2】:

【讨论】:

  • 嗯 - 我不知道我怎么错过了这个答案:)
  • @KenEgozi 我认为您的促销、营销和 SEO 团队需要采取行动:D
  • 是的,我肯定会动摇他们的船!
  • 死链接,可以通过从末尾删除正斜杠来修复。
  • @callumWatkins 感谢您的提醒;固定的。如果我再次看到此评论并带有 ack 而您的已消失,我将删除此...
【解决方案3】:

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

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

【讨论】:

  • 是的,为什么要自己写。就用这个。 Phil Haack(MVC 团队的经理)也将它用于 Subtext。
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

    我用 c# 编写了一个 IoC / DI 容器,它实现了 Common Service Locator。我写它主要是为了学习目的,但是当我完成它时,我决定让它开源。如果大家想试试IInject,可以下载here

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

          Autofac 非常好。

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

          【讨论】:

            【解决方案9】:

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

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

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

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

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

            【讨论】:

              【解决方案10】:

              Ayende 还在他的博文Building an IoC container in 15 lines of code 中写过关于编写自己的 IoC 容器的文章,但我相信他和其他人的观点是一样的:如果没有必要,不要自己构建。

              【解决方案11】:

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

              【讨论】:

                【解决方案12】:

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

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

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-12-07
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-04-29
                  • 1970-01-01
                  • 2010-09-16
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多