Taylan,
You'd probably want to use a Provider.
NInject 1.X:
using log4net;
using Ninject.Core.Activation;
using Ninject.Core.Creation;
public class LogProvider : SimpleProvider<ILog>
{
protected override ILog CreateInstance(IContext context)
{
return LogManager.GetLogger(context.Member.DeclaringType);
}
}
Ninject 2.0:
using log4net;
using Ninject.Activation;
public class LogProvider : Provider<ILog>
{
protected override ILog CreateInstance(IContext context)
{
Return
LogManager.GetLogger(context.Request.Target.Member.DeclaringType);
}
}
Then Bind to a provider instead of a type,
Ninject 1.X:
public class Log4NetModule : StandardModule
{
public override void Load()
{
this.Bind<ILog>().ToProvider<LoggerProvider>();
}
}
static void Main(string[] args)
{
StandardKernel kernel = new StandardKernel(new Log4NetModule());
kernel.Get<MyClass>();
}
public class MyClass
{
private ILog logger;
[Inject]
public MyClass(ILog logger)
{
this.logger = logger;
}
public MyFunction()
{
if (this.logger.IsInfoEnabled)
{
this.logger.Info("Hello World!");
}
}
}
Ninject 2.0:
static void Main(string[] args)
{
StandardKernel kernel = new StandardKernel();
kernel.Bind<ILog>().ToProvider(new LogProvider());
}
public class MyClass
{
private ILog logger;
[Inject]
public MyClass(ILog logger)
{
this.logger = logger;
}
public MyFunction()
{
if (this.logger.IsInfoEnabled)
{
this.logger.Info("Hello World!");
}
}
}
I've been using this without any problems thus far.
Regards,
Ben Ellis