2010-11-15 6 views
5

J'essaie d'éliminer certaines dépendances de l'exploitation forestière et j'ai trébuché sur l'installation forestière de Castle Windsor. Cependant, je suis un peu sceptique quant à savoir si je devrais l'utiliser ou non.Installation d'exploitation forestière Castle Windsor

public class MyClass 
{ 
    public Castle.Core.Logging.ILogger Logger { get; set; } 

    ... 
} 

La fonction de journalisation de Windsor exige que vous exposiez votre enregistreur en tant que propriété. Est-ce vraiment une bonne pratique? J'ai l'impression de briser presque l'encapsulation parce que normalement, quand je réutilise un composant, je m'en fiche de son mécanisme de journalisation et je ne veux normalement pas le voir exposé.

Si j'utilise un wrapper personnalisé qui utilise une classe statique pour créer le journal, je peux le garder privé. Par exemple:

public class MyClass 
{ 
    private static MyCustomWrapper.ILogger Logger = LogManager.GetLogger(typeof(MyClass)); 

    ... 
} 

J'ai cherché sur le web pour des raisons pour lesquelles je devrais utiliser l'installation de l'exploitation forestière, mais je suis seulement de trouver des articles sur comment à utiliser, mais pas pourquoi Je devrais l'utiliser. J'ai l'impression de manquer le point. Avoir le composant de journalisation exposé est un peu effrayant moi loin.

Répondre

5

La fonction de journalisation de Windsor exige que vous exposiez votre enregistreur en tant que propriété.

Pas nécessairement. Vous pouvez également placer votre enregistreur en tant que dépendance de constructeur (c'est-à-dire obligatoire). L'enregistreur est généralement déclaré comme une propriété (c'est-à-dire une dépendance facultative) car il peut ne pas y avoir d'enregistreur. Autrement dit, le composant devrait pouvoir fonctionner sans enregistreur.

Si j'utilise un emballage personnalisé qui utilise une classe statique pour créer le journal

C'est un localisateur de services, que les couples de code MyClass à LogManager, qui est à mon humble avis pire que ce que vous essayez d'obtenir loin de.

+0

Mais ne serais-je pas déjà couplé à 'Castle.Core.Logging.ILogger'? Ou est-ce parce que 'LogManager' est une classe statique et que je ne peux pas la remplacer? – Books

+0

@Ashley: exactement. Il y a beaucoup moins de couplage avec une interface. –