Абстрагирование зависимости DateTime.Current - PullRequest
8 голосов
/ 21 октября 2011

Существует ли пакет nuget или другой «стандарт», который оборачивает жесткую зависимость, создаваемую, когда ваш код связан с DateTime.Now?

Я ищу руководство по этому вопросу, прежде чем написать свой собственный.Хотя это и тривиально, я бы предпочел использовать то, что существует, если оно уже соответствует стандартам.

Ответы [ 3 ]

3 голосов
/ 21 октября 2011

Я очень сомневаюсь, что есть какой-нибудь пакет nuget для чего-то столь тривиального - один интерфейс и, возможно, две реализации («системные» часы и поддельная для тестирования).

Если вы делаете одиниз них, я бы сильно подумал бы о том, чтобы часы вернули DateTimeOffset вместо DateTime, или по крайней мере обернули бы DateTime.UtcNow ... DateTime.Nowэто проблема, которая должна произойти ...

Однако Noda Time содержит все это из коробки.Вы, вероятно, не хотите всего Noda Time только по этой причине, учтите ...

(Существует пакет Nget Time, но он определенно предварительный. Мне нужно обновить его до 0.2версия в какой-то момент, но она все еще еще не на уровне v1. Как добраться ...)


Если вы хотите действительно cheap-и - веселый способ выражения зависимости, вы всегда можете взять Func<DateTime> или Func<DateTimeOffset> везде, где вы обычно выражаете зависимости.Интерфейсный подход чище, хотя:)

1 голос
/ 21 октября 2011

Я не знаю ни одного пакета nuget, который делает это. Когда я столкнулся с этой проблемой, я просто создал свой собственный тип, подобный этому:

public static class SystemTime
{
    public static Func<DateTime> Now = () => DateTime.Now;
}

Таким образом, в своих модульных тестах вы можете легко изменить функциональность Now, чтобы вернуть любой DateTime, который вы хотите.

0 голосов
/ 31 июля 2015

Предположим, у нас есть метод:

public void Foo() {

  var now = DateTime.UtcNow;
  Record(now);      

Решение, которое я всегда использую, когда мне нужно DateTime.Now:

public void Foo(DateTime? now = null) {

  Record(now.GetValueOrDefault(DateTime.UtcNow));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...