2010-11-15 15 views
5

Ich versuche, einige Logging-Abhängigkeiten zu entfernen und stolperte über Castle Windsor Logging-Anlage. Allerdings bin ich skeptisch, ob ich es benutzen soll oder nicht.Castle Windsor Logging-Anlage

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

    ... 
} 

Die Protokollierungsfunktion von Windsor erfordert, dass Sie Ihren Logger als Eigenschaft aussetzen. Ist das wirklich eine gute Übung? Ich habe das Gefühl, dass ich die Verkapselung fast kaputt mache, denn normalerweise ist es mir egal, wenn ich eine Komponente wiederverwende, dass es sich um einen Protokollierungsmechanismus handelt, und normalerweise möchte ich es nicht sichtbar machen.

Wenn ich einen benutzerdefinierten Wrapper verwenden, der eine statische Klasse verwendet, um das Protokoll zu erstellen, kann ich es privat halten. Zum Beispiel:

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

    ... 
} 

habe ich suchte im Internet aus Gründen, warum ich die Protokollfunktion verwenden soll, aber ich bin nur Artikel auf wie zu verwenden, aber nicht warum finden Ich sollte es benutzen. Ich habe das Gefühl, dass ich den Punkt vermisse. Die Logging-Komponente ausgesetzt zu haben, macht mir irgendwie Angst.

Antwort

5

Windsors Protokollierungsfunktion erfordert, dass Sie Ihren Logger als Eigenschaft aussetzen.

Nicht unbedingt. Sie können Ihren Logger auch als Konstruktorabhängigkeit (d. H. Obligatorisch) definieren. Der Logger wird normalerweise als eine Eigenschaft deklariert (d. H. Optionale Abhängigkeit), da möglicherweise keine Protokollierung vorliegt. Das heißt, die Komponente sollte ohne einen Logger funktionieren können.

Wenn ich einen benutzerdefinierten Wrapper, der eine statische Klasse verwendet das Protokoll

Das ist ein Service-Locator, dass Code Paare MyClass-LogManager, die meiner Meinung nach schlimmer ist zu schaffen als das, was Sie zu bekommen, versuchten, Weg von.

+0

Aber wäre ich nicht schon an 'Castle.Core.Logging.ILogger' gekoppelt? Oder liegt es daran, dass 'LogManager' eine statische Klasse ist und ich sie nicht ersetzen kann? – Books

+0

@Ashley: genau. Es gibt viel weniger Kopplung mit einer Schnittstelle. –

Verwandte Themen