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…

如何正确传播异常?

Castle IInitializable异常未传播

这是设计。你正在解析A,它将B作为一个可选依赖项。由于异常,Windsor无法解析B,所以它将其视为不可解析的,并且由于它是可选的依赖项,所以没有错误,它只是在不注入B的情况下继续运行。

下面是一个非常类似的情况,以及一个解决方法。