为什么我需要创建 returns DateTime.Now 的 DateTime 服务而不是直接使用 DateTime.Now?

Why do I need to create a DateTime service which returns DateTime.Now instead of using DateTime.Now directly?

我一直在观看 Jason Taylor 关于 ASP.NET 核心的清洁架构的演讲(时间 35:52)

https://www.youtube.com/watch?v=dK4Yb6-LxAk&t=2134s&ab_channel=GOTOConferences

并且他创建了一个 DateTimeService 其中 returns DateTime.Now 并通过 AddTransient 方法注册,他建议使用它而不是直接使用 DateTime.Now 因为在在这种情况下,他不依赖于机器时钟。

我不清楚为什么他在这种情况下没有依赖关系,你能解释一下它是如何工作的吗?

如果您要实现一种不同的方式来获取当前时间,您需要做的就是为您的 IDateTimeService 创建一个新的实现,而不是更改 DateTime.Now 的每个实例在你的项目中。

一个例子是创建一个通过外部请求获取时间的服务,或者轻松地为单元测试创​​建一个模拟,这样您就可以正确断言依赖于日期和时间的结果。