代码之家  ›  专栏  ›  技术社区  ›  Jon Davis Glenn Block

IoC容器适用性/场景演示?

  •  3
  • Jon Davis Glenn Block  · 技术社区  · 16 年前

    NET领域的许多人已经学习了Castle Windsor并将其应用到他们的项目中,在过去的一年里,我一直在努力弄清楚为什么IoC容器似乎被视为一般的“最佳实践”?我已经阅读了很多关于温莎和诸如此类的原因的摘要和简要解释,但它们中的每一个都是抽象的,似乎对我接触过的大多数项目都不实用,但最近我遇到了很多使用温莎的项目,我不明白为什么。

    C#/.NET固有地支持基于接口的编码、抽象对象、委托和事件。可以直接从核心语言实现IoC,并使用反射等方法实例化实现已知接口的未知实例,而无需借助IoC容器库。

    当使用雅格尼/AYGNI(你会需要它吗?)时,我觉得温莎被过度使用了。我当然可以看到IoC容器的好处,但我觉得这些好处是以额外的依赖项和元数据为代价的(IoC容器特定的属性和方法在核心代码中调用,.config文件分散在各处,app.config/web.config充满了绑定标记,使得.config文件更难编辑,等等)所以我想找出一个折衷办法。

    也就是说,我接受了我正在制造的可能性 由于我从未参与过使用温莎或其他IoC容器库的项目,因此这些观察/陈述中有许多是关于无知的。我真正需要的是有人来演示一个“普通”或“典型”的项目,其中使用了一个IoC容器库,以及为什么在我看来这是一个“最佳实践”,而在我看来,这似乎使一个原本干净的项目充满了依赖项和元数据。

    (我不是为了争论而争论,而是因为我真的很想接受关于我是否应该在国际奥委会容器方面教育自己的教育)。

    4 回复  |  直到 7 年前
        1
  •  2
  •   Community basarat    7 年前

    看来你想知道答案 this question

    显然,如果系统像你所说的那样难以设置,那么当你开始维护它时,它就没有多大价值了。这是使用新技术时要牢记的一件重要事情。有时候,因为这个因素,旧的无聊的东西要好得多。

    是的 say themselves

    另外,取决于尺寸和尺寸 容器可能有点过分了。宁愿 在大中型项目中使用它。

        2
  •  2
  •   axk    16 年前

    这不是对你问题的直接回答,因为我不熟悉温莎城堡,我也不是国际奥委会专家,但从我对java版Spring的经验来看,我可以告诉你(我在这里谈论的是Spring,所以温莎城堡可能不是这样) 它不仅是依赖注入部分,而且是框架本身:声明式事务管理、内置安全框架、ORM支持、内置MVC web框架、RMI、web服务、电子邮件、AOP等,并且它与IoC进行了良好的集成,对于大多数典型的场景,fraework确实为您做了很多工作。

    我认为,带有注释和IDE支持的自动连接(例如IntelliJ IDEA for Spring)可以缓解配置文件问题。

        3
  •  1
  •   Rune Sundling    16 年前

    我不一定认为IoC容器在所有情况下都是好的。但这绝对是可能的。如果您使用依赖项注入或服务定位器来处理依赖项,不管怎样,您已经取得了很大的进步,但是IoC容器可以帮助您自动完成工作,为您提供对更高级场景的支持,等等。

    不久前,我在一篇博客文章中尝试为自己定义它:

    控制反转(IoC)容器是一种非侵入式可配置智能工厂组件

    把这个定义分成几个部分,我们得到

    • 工厂,因为它负责为您创建对象。

    • 可配置,因为您可以通过代码或配置文件配置使用情况。

    • 非侵入性,因为使用的对象不需要知道容器。

      -

    如果您将它与依赖注入或服务定位器模式一起正确使用,您确实会得到一些非常方便的好处。您不一定需要使用像Winsor这样的外部容器,但这确实给您带来了一些额外的好处。

    您可以编写更少的代码来实例化新对象。如果您想到更复杂的对象层次结构,IoC容器可以帮助您自动创建整个链。这可能非常强大。

    更改要注入构造函数的依赖项并不一定意味着需要重构很多代码。

    您可以通过一个源获得隧道依赖的各种好处:装饰器、拦截器、代理,以及处理对象。有了Windsor这样的容器,您就可以用极少的耦合完成一些非常简单的困难的事情

    您可以利用它的设施概念与例如NHibernate进行平滑集成

        4
  •  0
  •   Thedric Walker    16 年前

    我建议你听一下软件工程广播播客的第二集。这是关于依赖注入的一整集。依赖注入是控制框架反转最广为人知的用法。我还建议你听《DotNetRocks》第362集,里面有约翰·科瓦奇。 Here 这是节目的记录。

    现在IOC的一个副作用是增加了可测试性。像Castle Windsor这样的IOC容器的使用有助于解耦依赖关系。这种解耦有助于更好的单元测试。

    大多数IOC框架还提供了促进面向方面编程的方法。因此,如果您对IOC容器框架感兴趣,它可以帮助您实现这一点。