Как изменить значение DateTime.UtcNow для процесса или потока? - PullRequest
1 голос
/ 03 ноября 2009

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

Вызов API SetSystemTime() win32 изменит время во всей системе. Я использовал это раньше, но я хотел бы, чтобы метод был менее злым для других процессов, работающих в системе. Бессмысленно тратить время на автоматизированные серверы сборки.

В C # отсутствуют языковые функции, необходимые для переопределения поведения по умолчанию.

Возможно, метод, используемый .Net для получения текущего времени, может быть каким-либо образом проксирован?

Ответы [ 3 ]

4 голосов
/ 03 ноября 2009

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

3 голосов
/ 03 ноября 2009

DateTime.UtcNow, вероятно, вызывает Kernel32! GetSystemTimeAsFileTime () или что-то подобное. Вероятно, вы могли бы использовать библиотеку Detour от Microsoft Research , чтобы подключить этот API, а затем в своей функции подключения определить процессы и идентификаторы потоков, которые вы хотите дублировать.

Удачи в запуске программного обеспечения!

0 голосов
/ 03 ноября 2009

Да, определить интерфейс IKnowCurrentTime с одним свойством UtcNow. Используйте внедрение зависимостей, чтобы внедрить это в ваши классы. Сделайте реализацию по умолчанию вызовом DateTime.UtcNow и передайте это своим классам в PROD. В целях тестирования создайте макет IKnowCurrentTime и получите что угодно. Путь будущего малыша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...