Sollte bei Verwendung von IoC / DI eine Protokollierungsinfrastruktur hinzugefügt werden, wenn die Protokollierungsfassade verwendet wird?

Ich benutze Autofac als IoC und habe nach allem, was ich in DI gelesen habe, gelernt, mit "Konstruktorinjektion" Klassenabhängigkeiten explizit aufzudecken ... Ich verwende jedoch auch Logging Facade (Common.Logging) mit Log4Net und habe erstellt Autofac-Modul, um es zu injizieren. Jetzt habe ich in jeder Klasse, in der ich etwas protokollieren möchte, zusätzliche Konstruktorparameter (siehe Beispiel 1) ....

Ich frage mich, ob bei der Verwendung der Protokollierungsfassade eine DI-Protokollierung erforderlich ist. Ich verstehe, dass das explizite Offenlegen von Abhängigkeiten über Konstruktorsignaturen eine gute Architektur ist.aber Im Falle einer Holzfassade glaube ich, dass Folgendes zutrifft:

Ich kann das Protokollierungsframework jederzeit "auslagern"Die Klasse IMHO ist nicht wirklich von Logger abhängig. Wenn keine Protokollierung konfiguriert ist, wird NullLogger verwendet. Es ist fast so, als ob "es ist drei, wenn Sie es brauchen" oder "es wird nicht funktionieren, wenn Sie es nicht liefern", eine Art Deal ... (siehe Beispiel 2)

Also, was denken andere? Ist das Einspritzen einer Holzfassade ein Overkill? Dort sind einigeähnliche Fragen zu diesem Thema, aber allgemeiner (Infrastruktur) - Ich interessiere mich hauptsächlich für die Protokollierung ....

// IoC "way"
public class MyController : BaseController
{
    private readonly ILog _logger;

    public MyController(ILog logger)
    {
        _logger = logger;
    }

    public IList<Customers> Get()
    {
        _logger.Debug("I am injected via constructor using some IoC!");
    }
}

// just use the logger "way"
public class MyController : BaseController
{
    private static readonly ILog Logger = LogManager.GetCurrentClassLogger();

    public IList<Customers> Get()
    {
        Logger.Debug("Done! I can use it!");
    }
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage