Frage

Ich habe eine Logging-Klasse, die beim Start einer Konsolenanwendung und die gespeicherte in einer statischen Variablen instanziiert wird.

Wenn ich will eine Klasse die Logger verwenden soll es auf die Klasse im Konstruktor oder referenziert direkt übergeben werden?

Ich versuche, Unit-Tests und so oder so zu schreiben, ich in der Lage sein sollte, es zu tun. Nur bedeutet, dass ich die statische Variable setzen, bevor Sie den Code aufrufen, die es verwendet.

Prost.

Keine korrekte Lösung

Andere Tipps

Klingt wie das, was Sie suchen, ist eine Art von IoC-Container . Sie könnten EntLib Unity oder etwas anderes wie diese verwenden.

Um Ihre Klassen als Einheit prüfbar wie möglich zu machen, werden alle Abhängigkeiten, einschließlich Logger, sollten wann immer möglich übergeben werden. Dies ist, was Dependency Injection (DI) genannt wird, und ist eine sehr häufige und Standardmustereinheit prüfbar Code für das Schreiben. Die Protokollierung ist fast immer ein Querschnitt Besorgnis, dass nur in den Körpern von Methoden eingebettet ist, denn es gibt wirklich keine anständigen Rahmen AOP richtig diese Bedenken herausziehen und wendet sie deklarativ. Nachdem mit der Protokollierung zu beschäftigen, wenn das Schreiben / Unit-Tests laufen nur die Komplexität der Tests erhöht, möglicherweise zusätzliche Konfiguration betrifft das Hinzufügen, wenn Sie wirklich wie möglich halten wollen Ihre Tests so einfach und zielgerichtet.

Wie wäre es mit dem Statisches Gateway Pattern ?

Sie können eine Instanz davon erstellen und speichern diese Instanz als Mitglied der gleichen Klasse & zurückgeben, die über eine Eigenschaft.

z. Logger.Default
Dadurch wird der Verweis auf die Instanz zurück, die erstellt wurde.

EDIT: Ein Beispiel hierfür könnte Console-Klasse sein und es Absteckung Methode. Ich meine, Sie über die Verwendung Console.WriteLine halten kann .... und wenn Sie den Stream ändern möchten, verwenden Sie die SetOut Methode. Es leitet die Ausgabe an einen neuen Stream.

Ich hoffe, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top