2010-07-20 4 views
1

Étant donné le code suivant.Castle Windsor le constructeur par défaut est appelé à la place du constructeur avec une dépendance

[TestMethod] public void CanResolveILoggerTest() 
    { 
     var Container = new Castle.Windsor.WindsorContainer(); 
     Container.Register(
      Component.For<Castle.Core.Logging.ILogger>() 
       .ImplementedBy<Castle.Core.Logging.TraceLogger>(), 
      Component.For<NeedsLogger>() 
      ); 
     var blah = Container.Resolve<NeedsLogger>(); 
    } 
    public class NeedsLogger 
    { 
     public NeedsLogger() 
     { 
      throw new Exception("container shouldn't resolve me"); 
     } 
     Castle.Core.Logging.ILogger logger; 

     public NeedsLogger(Castle.Core.Logging.ILogger logger) 
     { 
      this.logger = logger; 
     } 
    } 

Pourquoi le constructeur par défaut de NeedsLogger est appelé à la place de celui avec une dépendance.

Répondre

2

Probablement parce que l'enregistreur n'est pas prêt (il attend que sa propre dépendance soit fournie).

Je suggère fortement que, au lieu de faire cela, vous utilisez Logging Facility, qui prendra soin de l'enregistrement et de fournir des enregistreurs pour vous/

Questions connexes