2010-07-12 4 views
13

De quelle configuration ai-je besoin pour configurer une dépendance de propriété statique à l'aide du conteneur Windsor?Injecter une dépendance dans une classe statique

J'ai la classe suivante pour l'instant et je voudrais que la propriété Logger soit injectée.

static class StuffDooer 
{ 
    static ILogger Logger { get; set; } 

    static StuffDooer() { Logger = NullLogger.Instance; } 
} 

Voici ma configuration bien que cette fonctionnalité semble trouver automatiquement les propriétés de l'instance sans problème, la version statique n'étant pas définie.

<facility id="logging" 
      type="Castle.Facilities.Logging.LoggingFacility, Castle.Facilities.Logging" 
      loggingApi="nlog" 
      customLoggerFactory="Castle.Services.Logging.NLogIntegration.NLogFactory" 
      configFile="Configuration/nlog.config" /> 

Répondre

26
StuffDooer.Logger = container.Resolve<ILoggerFactory>().GetLogger(typeof(StuffDoer)); 

Si vous pensez qu'il est laid, c'est la réaction correcte. La statique et l'IoC ne se mélangent pas, comme l'alcool et la conduite automobile.

+0

LOL Ok, je pourrais repenser la conception de ma classe à la place –

+2

La seule différence est que dans la plupart des endroits, il y a un taux d'alcoolémie maximum permis en conduisant (ici, il est de 0,05%). Le CIO et la statique ont une approche sans tolérance. –

Questions connexes