【问题标题】:Why do I need to create a DateTime service which returns DateTime.Now instead of using DateTime.Now directly?为什么我需要创建一个返回 DateTime.Now 而不是直接使用 DateTime.Now 的 DateTime 服务?
【发布时间】:2022-02-11 18:39:41
【问题描述】:

我一直在观看 Jason Taylor 关于使用 ASP.NET Core 进行清洁架构的演讲(时间 35:52)

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

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

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

【问题讨论】:

  • 无需费心观看:可能是为了让您可以将替代实现注入到单元测试中,让您可以控制从Now 返回的值。
  • 尝试为此函数编写测试:return DateTime.Now.AddDays(amountOfDays);
  • 在你的代码中测试时间行为,例如测试周期性事件或超时,如果没有办法改变你的代码所看到的时间,将会非常困难。使用DateTime.Now 无法将时间快进例如 60 秒来检查超时是否有效

标签: c# .net asp.net-core datetime .net-core


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2021-12-07
    • 2011-07-23
    • 2020-09-12
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多