Dies kann etwas mit Pass ILogger oder ILoggerFactory an Konstruktoren in AspNet Core zusammenhängen? Hier geht es jedoch speziell um das Bibliotheksdesign und nicht darum, wie die eigentliche Anwendung, die diese Bibliotheken verwendet, ihre Protokollierung implementiert.
Ich schreibe eine .net Standard 2.0-Bibliothek, die über Nuget installiert wird. Damit Benutzer dieser Bibliothek Debug-Informationen abrufen können, bin ich auf Microsoft.Extensions.Logging.Abstractions angewiesen, damit ein standardisierter Logger injiziert werden kann.
Ich sehe jedoch mehrere Schnittstellen, und Beispielcode im Web verwendet manchmal ILoggerFactory
einen Logger im ctor der Klasse und erstellt ihn. Es gibt auch ILoggerProvider
eine schreibgeschützte Version der Factory, aber Implementierungen können beide Schnittstellen implementieren oder nicht, also müsste ich mich entscheiden. (Fabrik scheint häufiger als Anbieter).
Einige Codes, die ich gesehen habe, verwenden die nicht generische ILogger
Schnittstelle und teilen möglicherweise sogar eine Instanz desselben Loggers. Einige nehmen eine ILogger<T>
in ihren ctor und erwarten, dass der DI-Container offene generische Typen oder die explizite Registrierung jeder einzelnen ILogger<T>
Variation meiner Bibliothek unterstützt Verwendet.
Im Moment denke ich, dass dies ILogger<T>
der richtige Ansatz ist, und vielleicht ein Ctor, der dieses Argument nicht akzeptiert und stattdessen nur einen Null-Logger übergibt. Auf diese Weise wird keine verwendet, wenn keine Protokollierung erforderlich ist. Einige DI-Container wählen jedoch den größten ctor und würden daher trotzdem ausfallen.
Ich bin gespannt, was ich soll hier zu tun , die geringste Menge an Kopfschmerzen für die Nutzer zu schaffen , während immer noch die richtige Protokollierung Unterstützung ermöglicht , falls gewünscht.