【问题标题】:Throwing an exception when failing to resolve a dependency无法解决依赖关系时引发异常
【发布时间】:2011-07-18 22:00:31
【问题描述】:

考虑以下类:

public class ComponentA
{
    public ComponentB ComponentB { get; set; }

    public ComponentA(ComponentC componentC) { ... }
}

当我解析 ComponentA 时,Castle 会正确注入 ComponentBComponentC

但是,如果在实例化 ComponentB 时出现问题,它会吞下异常,从而导致延迟错误 (NullReferenceException)。

我了解这两种方法之间的区别,但是当注入的属性出现问题时,是否有可能使其失败(或至少记录完整的异常)?

【问题讨论】:

    标签: c# .net dependency-injection castle-windsor


    【解决方案1】:

    基于 Mauricio's answer 到 Phil 链接的问题,我创建了一个 StrictComponentActivator,即使依赖项是可选的,它也不会吞下异常。

    按预期工作。

    【讨论】:

      【解决方案2】:

      我相信这是预期的行为,AFAIK 没有办法解决它。

      一个选项可能是使用 ComponentB 的私有成员,该成员设置为默认实现(如果需要,则在访问时抛出异常),但如果解析成功,则会被容器覆盖。

      private ComponentB _b = new ExceptionThrowingComponentB();
      
      public ComponentB B
      {
         get { return _b; }
         set { _b = value; }
      } 
      

      正如 svick 所说:这不是一个好的解决方案。

      编辑:我不确定我是否理解所涉及的所有内容,但听起来你可以改变这种行为:

      Castle Windsor strange behaviour wth property injection and factory method

      【讨论】:

      • 异常抛出实现与null 有何不同,null 在尝试使用时也总是抛出异常?
      • 嗯,你是对的,真的没有。我从一个默认/无操作实现开始(这是我通常这样做的方式),然后意识到他想要抛出一个异常。
      猜你喜欢
      • 2016-02-16
      • 2017-02-20
      • 2018-05-25
      • 2020-07-01
      • 2019-09-14
      相关资源
      最近更新 更多