我已经在这个论坛中经历了一些与Ninject和Log4net相关的其他帖子,但似乎没有人解决这个问题(或解决它)。Ninject注入ILog依赖项
代码看起来像
IKernel kernel = new StandardKernel(new NinjectSettings() { LoadExtensions = true });
kernel.Load(Assembly.GetExecutingAssembly());
Program pgm = new Program(kernel.Get<IFSLog>());
的例外是在最后一行抛出以上消息“错误激活的ILog。没有匹配的绑定都可以......”
IFSLog是我组装定义的接口其实现了如下
public class Log4NetLog : IFSLog {
private ILog logger;
public Log4NetLog(ILog log) {
this.logger = log;
}
...
}
项目引用Ninject.extensions.logging.log4net组装log4net的ILOG对象的依赖关系,所以我未理解是应该从那里确定ILog绑定。
另外手动
public class Bindings : NinjectModule {
public override void Load() {
Bind<IFSLog>().To<Log4NetLog>();
}
}
和初始化内核试图指定绑定的另一种方法如
IKernel kernel = new StandardKernel(new NinjectSettings() { LoadExtensions = false },
new INinjectModule[] {new Bindings(), new Log4NetModule()});
仍然相同的结果。任何帮助非常感谢,在此先感谢...
这log4net的版本是你的'IFSLog'引用?它*可能是ninject扩展引用了不同的版本。 – BatteryBackupUnit
log4net版本是1.2.13.0,ninject.extensions.logging.log4net是3.2.0.0。 作为解决方案,我添加了一个自定义ILogFactory接口,该接口具有GetLogger方法,该方法将调用LogManager.GetLogger,然后用此新接口替换IFSLog运行时依赖项。在各个类中,我通过调用ILogFactory.GetLogger来初始化ILog成员....虽然它起作用,但仍不确定为什么早期尝试没有。谢谢 – Firmusoft
以及我只是想知道这是否是由ninject引起的。 extensions.logging.log4net(3.2.0.0)引用log4net 1.2.11,并引用不同的版本(1.2.13.0)。也许你可以降级到1.2.11,看看会发生什么? 我们曾经有类似log4net的问题。说实话,你使用ninject log4net日志扩展的目的是什么?这只是一堆简单的类(用于日志界面的包装..)+ 1或2个绑定,我只会推出自己的。 – BatteryBackupUnit