Ninject logger using NLog

c#, ninject, nlog

Solution

I use the following:

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

To have the logger with the name of the class. I'm using Log4net, but I think the idea can be applied to any log as well: in fact binding to a method open you to any solution in order to create the needed instance.

Problem

I've just started learning Ninject but have come across a problem with the logger. I've currently got a controller that has a service and logger injected into the constructor like so: ``` public ToolsController(IToolsService toolsService, ILogger logger) { logger.Info("ToolsController Created"); this.toolsService = toolsService; this.logger = logger; } ``` The problem is on the logger.Info line (for example) in the constructor which seems to use the wrong logger, so the logger name it prints out is incorrect. ``` Tools.IGeocodeImporter: ToolsController Created ``` Below is how it is setup to get the logger name: ``` kernel.Bind<ILogger>().To<Logger>().WithConstructorArgument("name", x => x.Request.ParentContext.Request.Service.FullName); ``` Any advice would be appreciated.

Original source