0

这是使用 Ninject V3.0 不起作用的设置

public class LoggerModule : NinjectModule{
public override void Load()
{
 Bind<ILogger>.ToProvider(MyLoggerProvider);
}
}

public class MyLoggerProvider: IProvider<ILogger>
{
 public object Create(IContext context){
return new OneOfMyLoggers();
}
}

在我的应用程序中,无论我在哪里注入 ILogger 实例(使用构造函数或属性注入,这很重要),我从来没有解析 ILogger 的实例。

但是如果不使用模块和/或 povider,并在创建内核时绑定,那么一切都像一个魅力。以下作品

public class MyDiResolver()
{
  public MyDiResolver()
{
  MyKernel = new StandardKernel();
  MyKernel.Bind<ILogger>().To<OneOfMyLoggers>();
}
}

在 Ninject2.x 版本中,模块和提供程序的相同排列可以正常工作。我错过了关于 Ninject V3.0 的一些不同之处吗?

谢谢

4

1 回答 1

0

Try passing the module into the StandardKernel so it knows to use it:

using (IKernel kernel = new StandardKernel(new LoggerModule()))
{
    ILogger logger = kernel.Get<OneOfMyLoggers>();   
}
于 2012-06-19T13:17:07.110 回答