2012-12-06 21 views
12

Ho appena iniziato a studiare Ninject ma ho riscontrato un problema con il registratore. Ho attualmente ho un controller che dispone di un servizio e logger iniettato il costruttore in questo modo:Registratore di dati con NLog

public ToolsController(IToolsService toolsService, ILogger logger) 
{ 
    logger.Info("ToolsController Created"); 
    this.toolsService = toolsService; 
    this.logger = logger; 
} 

Il problema è sulla linea logger.Info (per esempio) nel costruttore che sembra utilizzare il logger sbagliato , quindi il nome del logger che stampa è errato.

Tools.IGeocodeImporter: ToolsController Created 

Di seguito è come è configurato per ottenere il nome logger:

kernel.Bind<ILogger>().To<Logger>().WithConstructorArgument("name", x => x.Request.ParentContext.Request.Service.FullName); 

Tutto il consiglio sarebbe apprezzato.

+0

avresti aspettato? –

+0

Il nome della classe dovunque si trovi il logger. Qualcosa sulla falsariga di: 'ToolsController: ToolsController Creato ' – user1883004

risposta

14

Io uso il seguente:

.Bind<ILog>().ToMethod(p => LogManager.GetLogger(
        p.Request.Target.Member.DeclaringType)); 

Per avere il registratore con il nome della classe. Sto usando Log4net, ma penso che l'idea possa essere applicata anche a qualsiasi registro: infatti, vincolando a un metodo, si apre a qualsiasi soluzione per creare l'istanza necessaria.

9

Io uso un'estensione ninject chiamata Ninject.Extensions.Logging.NLog2, che può essere trovata su NuGet o GitHub. Gestisce il binding di NLog, quindi non devi fare altro che aggiungerlo al tuo progetto e rimuovere tutti i binding a NLog che hai adesso.

+0

Sai se ci sono tutorial disponibili con questa libreria? –

+0

Controlla questo link http://blog.tonysneed.com/2011/10/09/using-nlog-with-dependency-injection/ –

+0

Ecco il link all'estensione wiki https://github.com/ninject/ ninject.extensions.logging/wiki – jmdon

0

Come accennato Felice è possibile utilizzare lo stesso metodo, tuttavia per NLog avete bisogno di un piccolo cambiamento di bit che è:

.Bind<ILogger>().ToMethod(p => NLog.LogManager.GetCurrentClassLogger(
        p.Request.Target.Member.DeclaringType)); 
Che nome logger
Problemi correlati