2010-11-15 4 views
5

Sto cercando di rimuovere alcune dipendenze di registrazione e sono inciampato nella struttura di registrazione di Castle Windsor. Tuttavia, sono piuttosto scettico sul fatto che dovrei usarlo o meno.Impianto per la registrazione di windsor Castle

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

    ... 
} 

L'impianto di registrazione di Windsor richiede l'esposizione del registratore come una proprietà. E 'davvero una buona pratica? Sento che sto quasi rompendo l'incapsulamento perché normalmente quando riutilizzo un componente, non mi interessa il suo meccanismo di registrazione e di solito non voglio vederlo esposto.

Se utilizzo un wrapper personalizzato che utilizza una classe statica per creare il registro, posso mantenerlo privato. Per esempio:

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

    ... 
} 

Ho cercato nel web per ragioni Perché dovrei usare la funzione di registrazione, ma sto solo trovare articoli su come da usare, ma non perché Dovrei usarlo. Mi sento come se mi mancasse il punto. Avere esposto il componente del logging mi fa quasi paura.

risposta

5

L'impianto di registrazione di Windsor richiede l'esposizione del registratore come una proprietà.

Non necessariamente. Puoi anche inserire il tuo logger come una dipendenza costruttore (cioè obbligatoria). Il logger viene solitamente dichiarato come proprietà (cioè dipendenza opzionale) perché potrebbe non esserci logger. Cioè, il componente dovrebbe essere in grado di funzionare senza un logger.

Se io uso un involucro personalizzato che utilizza una classe statica per creare il registro

Questo è un localizzatore di servizio, che le coppie di codice MyClass a LogManager, che è secondo me peggio di quello che si stava tentando di ottenere lontano da.

+0

Ma non sarei già abbinato a 'Castle.Core.Logging.ILogger'? Oppure perché 'LogManager' è una classe statica e non posso sostituirla? – Books

+0

@Ashley: esattamente. C'è molto meno accoppiamento con un'interfaccia. –