2011-11-24 4 views
1

Учитывая этот код:Замок IInitializable исключение не распространяется

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 будет распространяться на основной улов. Вместо этого исключение попадает на виндзор, а свойство a.b равно null ...

Любая идея правильно разобраться в моем исключении?

+0

Зачем вам это исключение и почему B не является обязательной зависимостью от A? –

ответ

0

Это по дизайну. Вы разрешаете A, у которого есть B как факультативно зависимости. Виндзор не может разрешить B из-за исключением, поэтому он рассматривает его как не разрешимо, и так что это необязательно зависимости, нет никакой ошибки, он просто выполняет без инъекционного B.

Here's a very similar situation, along with a workaround.

Смежные вопросы