【问题标题】:Should I resolve all my dependencies at the root level?我应该在根级别解决所有依赖项吗?
【发布时间】:2015-09-18 13:01:23
【问题描述】:

我正在构建一个使用依赖注入的应用程序,由于我确实使用了很多依赖项,我无法理解我需要在哪里解决这些依赖项:

假设我正在编写一个相当复杂的控制台应用程序,并且该应用程序一起使用了 100 个接口,这些接口都注册在一个 IoC 容器中。

这是否意味着我需要在根方法的构造函数中解析所有这 100 个接口(因为否则我不再使用依赖注入)。

对此有任何疑问或在现代如何解决?

氪,

【问题讨论】:

    标签: c# .net dependency-injection inversion-of-control


    【解决方案1】:

    我不清楚您所说的“解决”是什么意思。如果您的意思是,您是否需要在组合根中实例化所有对象,那么不需要。当您创建上层依赖项时,它们会被实例化。

    如果您的意思是,您是否需要在组合根目录中注册所有依赖项,那么是的。但是,根据您使用的框架,可能可以使用约定优于配置的方法来执行此操作,而无需显式指定每个依赖项。

    如果“根方法”是指任何给定类的构造函数,那么是的,您需要在创建类时实例化该类所依赖的所有对象(以及这些对象所依赖的任何对象)。

    使用依赖注入时,创建对象应该很便宜。如果你有昂贵的对象,那么你应该推迟昂贵部分的实例化,直到你真正使用它,通过某种惰性方法或工厂。

    【讨论】:

    • 谢谢,这是有道理的。但是通过在根目录中实例化 100 多个对象,它不会让代码变得非常混乱吗?
    • @Complexity - 这取决于。再次,阅读我的第二段。但是,即使您确实手动创建了每个引用,这也只是一个混乱的地方,您始终可以将其重构为组织的子方法。
    • 你知道任何使用“Convention Over Configuration”的容器吗?然后叫什么,所以我可以搜索一下。
    • @Complexity - StructureMap 经常使用它们,SimpleInjector 有扩展来做到这一点,就像大多数其他人一样。你用的是哪一个?例如:stackoverflow.com/questions/28753241/…
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 2018-09-03
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多