问题描述
根据 Pac0 的评论 here,可以像这样注册 NodaTime.SystemClock
:builder.Register(_ => SystemClock.Instance).As<IClock>().SingleInstance();
。
如何对 NodaTime.ZonedClock
执行相同的操作?
解决方法
ZonedClock
似乎没有像 SystemClock
那样的单例访问器,所以你必须调用它的构造函数。使用与 SystemClock
相同的方法,它看起来像这样:
builder
.Register(_ => new ZonedClock(SystemClock.Instance,DateTimeZone.Utc,CalendarSystem.Gregorian))
.As<IClock>()
.SingleInstance();
您可以根据需要调整参数(我添加了 DateTimeZone.Utc
和 CalendarSystem.Gregorian
作为示例)。
请记住,由于两者都实现了相同的接口 (IClock
),因此您不能在不使用密钥注册或类似内容的情况下同时注册两者。但是,如果您只想使用 ZonedClock
,这应该不是问题。