如何使用 Autofac 注册 NodaTime.ZonedClock

问题描述

根据 Pac0 的评论 here,可以像这样注册 NodaTime.SystemClockbuilder.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.UtcCalendarSystem.Gregorian 作为示例)。

请记住,由于两者都实现了相同的接口 (IClock),因此您不能在不使用密钥注册或类似内容的情况下同时注册两者。但是,如果您只想使用 ZonedClock,这应该不是问题。