All infos - Пользовательский поставщик времени C#
22
июль

Пользовательский поставщик времени 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...

Share this post