如何配置Ninject以注入NodaTime IClock

Bra*_*ery 3 c# ninject nodatime

在我的NinjectConfigurator中

container.Bind<IClock>().To<SystemClock>(); 
Run Code Online (Sandbox Code Playgroud)

我也试过了

container.Bind<IClock>().To<SystemClock>().InSingletonScope();
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

错误激活IClock使用结合IClockSystemClock 没有构造函数可用来创建实现类型的实例.

激活路径:3)将依赖IClock注入SystemManager类型构造函数的参数时钟2)将依赖ISystemManager注入到AccountController类型构造函数的参数systemManager中1)对AccountController的请求

建议:1)确保实现类型具有公共构造函数.2)如果已实现Singleton模式,请使用与InSingletonScope()的绑定.

这是我的注入类,与我在项目中使用IoC的所有其他工作类相同:

private readonly IDateTime _dateTime;
private readonly IClock _clock;

public SystemManager(IDateTime dateTime, IClock clock)
{
    this._dateTime = dateTime;
    this._clock = clock;
}
Run Code Online (Sandbox Code Playgroud)

我找不到任何可以帮助我的事情.任何帮助深表感谢.

Jon*_*eet 6

我有一段时间没有使用过NInject,但我相信你想ToConstant()用来绑定到以下实例SystemClock:

container.Bind<IClock>().ToConstant(SystemClock.Instance);
Run Code Online (Sandbox Code Playgroud)

  • 对于那些迷失于此问答但正在寻找Microsoft依赖项注入答案(ServiceProvider,ServiceCollection ...)的用户,可以使用类似的代码:`services.AddSingleton &lt;IClock&gt;(SystemClock.Instance);` (3认同)