在无法解决依赖项时抛出异常

本文关键字:抛出异常 依赖 解决 | 更新日期: 2023-09-27 18:02:47

考虑以下类:

public class ComponentA
{
    public ComponentB ComponentB { get; set; }
    public ComponentA(ComponentC componentC) { ... }
}

当我解析一个ComponentA时,Castle正确地注入了ComponentBComponentC

但是,如果实例化ComponentB有问题,它会吞下异常,导致延迟错误(NullReferenceException)。

我理解这两种方法之间的差异,但是否有可能使它失败(或至少记录完整的异常),当有一个问题与注入的属性?

在无法解决依赖项时抛出异常

根据Mauricio对Phil链接的问题的回答,我创建了一个StrictComponentActivator,即使依赖是可选的,它也不会吞下异常。

工作正常

我相信这是预料之中的行为,而且我想没有别的办法。

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

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

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

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

Castle Windsor属性注入和工厂方法的奇怪行为