是否存在nuget包或其他“标准”,它包含了在代码与DateTime.Now
耦合时创建的硬依赖项?
我在写这篇文章之前正在寻求指导。虽然这样做很简单,但如果它已经作为一种标准,我宁愿使用存在的东西。
答案 0 :(得分:3)
我非常怀疑有任何nuget包用于任何非常微不足道的事情 - 一个接口,可能还有两个实现(“系统”时钟和一个用于测试的假时钟)。
如果你自己做其中一个,我会强烈考虑让时钟返回DateTimeOffset
而不是DateTime
,或至少< / em> make it wrap DateTime.UtcNow
... DateTime.Now
是一个等待发生的问题......
但是,Noda Time包含所有这些开箱即用的内容。你可能不希望整个Noda Time出于这个原因,请注意......
(有一个Noda Time nuget包,但它肯定是预先发布的。我需要在某个时候将它更新到0.2版本,但它仍然仍然而不是v1级别。虽然...)
如果您希望真的以低廉而愉快的方式表达依赖关系,那么您通常可以在通常表达依赖关系的地方使用Func<DateTime>
或Func<DateTimeOffset>
。接口方法虽然更清晰:)
答案 1 :(得分:1)
我不知道任何这样做的nuget包。当我遇到这个问题时,我只是简单地创建了我自己的类型:
public static class SystemTime
{
public static Func<DateTime> Now = () => DateTime.Now;
}
在单元测试中,您可以轻松更改Now的功能,以返回所需的任何DateTime。
答案 2 :(得分:0)
假设我们有一个方法:
public void Foo() {
var now = DateTime.UtcNow;
Record(now);
我总是在需要DateTime.Now
时使用的解决方案是:
public void Foo(DateTime? now = null) {
Record(now.GetValueOrDefault(DateTime.UtcNow));