抽象DateTime.Current依赖项

时间:2011-10-21 15:18:08

标签: c# .net datetime dependencies decoupling

是否存在nuget包或其他“标准”,它包含了在代码与DateTime.Now耦合时创建的硬依赖项?

我在写这篇文章之前正在寻求指导。虽然这样做很简单,但如果它已经作为一种标准,我宁愿使用存在的东西。

3 个答案:

答案 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));