代码之家  ›  专栏  ›  技术社区  ›  meandmycode

这种ioc行为背后的原因是什么(使用多个注册组件进行解析)

  •  0
  • meandmycode  · 技术社区  · 16 年前

    container.AddComponent<ILogger, HttpLogger>();
    container.AddComponent<ILogger, SmtpLogger>();
    
    var logger = container.Resolve<ILogger>();
    

    然而,很可能是ioc无法解析第一个记录器的依赖关系,因此将返回解析问题,如果ioc尝试了SmtpLogger,很可能已经解析了它。

    那么,只使用第一个注册服务作为候选的理由是什么?看起来,你将得到哪种类型的不确定性是一个参数,但随后ioc将负责它无论如何使用的构造函数。

    那么,为什么不从所有适用类型的所有构造函数中挑选,并开始尝试从最胖的构造函数中解析出来(与真实类型无关)呢?

    这可能有一个非常明显的答案,但老实说,我不知道。

    斯蒂芬。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Nicholas Blumhardt    16 年前

    它的 依赖关系等等。

    MEF虽然不是严格意义上的IoC容器,但确实以类似于您建议的方式做到了这一点——它是稳定组合行为的一部分,我们称之为“拒绝”。

    http://blogs.msdn.com/nblumhardt/archive/2009/07/17/light-up-or-mef-optional-exports.aspx