Mi chiedevo quali erano le migliori pratiche in merito ai registri di registrazione e registrazione e all'iniezione delle dipendenze. Specificamente, se sto progettando una classe che ha bisogno di un modo per accedere, come dovrei fare per ottenere un'interfaccia da registrare per tenere a mente l'iniezione di dipendenza?interfacce di registrazione e registrazione delle dipendenze
Iniezione di dipendenza sembra indicare che le dipendenze esterne devono essere iniettate dall'esterno (costruttore o setter di proprietà), quindi dovrei prendere un'istanza ILog nel costruttore e usarla nella classe? Dovrei considerare di loggare una dipendenza opzionale e metterla in un setter? Sto spingendo per troppa flessibilità consentendo la modifica dell'interfaccia di logging e dovrei semplicemente prendere una dura dipendenza da un'interfaccia di registrazione specifica (ad esempio, creare una variabile ILog statica tramite una chiamata a un metodo factory)? Questo richiamo del metodo factory può essere richiamato nel contenitore per ottenere l'implementazione di ILog o creerà conflitti di inizializzazione tra le variabili statiche in fase di inizializzazione e il contenitore IoC inizializzato?
dovrei fare questo:
public class MyService : ISomeService
{
private static readonly ILogger s_log =
LoggingFactory.GetLogger(typeof(MyService))
...
}
o forse questo:
public class MyService : ISomeService
{
protected virtual ILogger Logger {get; private set;}
public MyService(ILogger logger, [other dependencies])
{
Logger = logger;
}
}
o anche questo:
public class MyService : ISomeService
{
public virtual ILogger Logger {get; set;}
public MyService()
{
}
}
Altri modelli o modi per fare questo? Cosa stanno facendo le persone là fuori? Cosa funziona e quando?
Vorrei optare per la seconda o terza opzione a seconda se avere o meno un logger per il servizio è considerato critico. – toad