Castle IInitializable异常未传播
本文关键字:传播 异常 IInitializable Castle | 更新日期: 2023-09-27 18:15:44
考虑以下代码:
public class A
{
public B b { get; set; }
}
public class B : IInitializable
{
#region IInitializable Members
public void Initialize()
{
throw new NotImplementedException();
}
#endregion
}
class Program
{
static void Main(string[] args)
{
WindsorContainer container = new WindsorContainer();
container.Register(Component.For<A>());
container.Register(Component.For<B>());
try
{
A a = container.Resolve<A>();
// goes here and a.b is null !!!
}
catch (Exception ex)
{
// never goes here :(
Console.WriteLine(ex);
}
}
}
我希望NotImplementedException被传播到主catch。相反,异常被windsor捕获,属性a.b为null…
如何正确传播异常?
这是设计。你正在解析A,它将B作为一个可选依赖项。由于异常,Windsor无法解析B,所以它将其视为不可解析的,并且由于它是可选的依赖项,所以没有错误,它只是在不注入B的情况下继续运行。
下面是一个非常类似的情况,以及一个解决方法。