考虑以下课程:
public class ComponentA
{
public ComponentB ComponentB { get; set; }
public ComponentA(ComponentC componentC) { ... }
}
当我解析ComponentA
时,Castle会正确地注入ComponentB
和ComponentC
。
但是,如果在实例化ComponentB
时出现问题,则会吞下该异常,从而导致延迟错误(NullReferenceException)。
我理解两种方法之间的区别,但是当注入属性出现问题时,是否可能使其失败(或者至少记录完整的异常)?
答案 0 :(得分:1)
基于Mauricio's answer基于Phil关联的问题,我创建了一个StrictComponentActivator
,即使依赖项是可选的,也不会吞下异常。
按预期工作。
答案 1 :(得分:0)
我相信这是预期的行为,AFAIK没有办法绕过它。
一个选项可能是使用ComponentB的私有成员设置为默认实现(如果需要,则会在访问时抛出异常),但如果解析成功则被容器覆盖。
private ComponentB _b = new ExceptionThrowingComponentB();
public ComponentB B
{
get { return _b; }
set { _b = value; }
}
击> <击> 撞击>
正如斯维克所说:不是一个好的解决方案。
编辑:我不确定我是否理解所有内容,但听起来您可以更改此行为:
Castle Windsor strange behaviour wth property injection and factory method