Пользовательский поставщик времени C#
Пользовательский поставщик времени нужен для модульных тестов.
public abstract class TimeProvider
{ private static TimeProvider current; static TimeProvider() { current = new DefaultTimeProvider(); } public static TimeProvider Current { get => current; set => current = value ?? throw new ArgumentNullException("value"); } public abstract DateTime UtcNow { get; } public static void ResetToDefault() { current = new DefaultTimeProvider(); } }
Это singleton по сути реализует ambient context, что есть способ внедрения зависимости.
Класс наследник:
public class DefaultTimeProvider : TimeProviderpublic class DefaultTimeProvider : TimeProvider
{
public override DateTime UtcNow => DateTime.UtcNow;
}
В DefaultTimeProvider можно добавить и другие свойства Now, Day...