/// <summary> /// Создает хранящую фабрику из значения value. /// Смотри описание StoreFactoryMode /// Параметр mode фиктивный только ради перегрузки по типу, обрабатывая только StoreFactoryMode.StoringValueAndMakerWillDisposingValue /// </summary> public static IStoreFactory <T> Make <T>(T value, StoreFactoryMode mode = StoreFactoryMode.StoringValueAndMakerWillDisposingValue) where T : class, IDisposable { switch (mode) { case StoreFactoryMode.StoringValueAndMakerWillDisposingValue: return(new Impl.Stored <T>(value)); case StoreFactoryMode.MakingNewValue: throw new ArgumentException($"Logic error. Not allowed {nameof(mode)}=${mode}. Value already created. Can't making new from already created."); } throw new NotImplementedException($"Not implemented {nameof(mode)}=${mode}."); }
/// <summary> /// Создает хранящую фабрику из функтора valueFactory. /// Смотри описание StoreFactoryMode /// </summary> public static IStoreFactory <T> Make <T>(Func <T> valueFactory, StoreFactoryMode mode = StoreFactoryMode.MakingNewValue) where T : class, IDisposable { switch (mode) { case StoreFactoryMode.StoringValueAndMakerWillDisposingValue: return(new Impl.Stored <T>(valueFactory is null ? throw new ArgumentNullException($"Not supported null {nameof(valueFactory)}") : valueFactory())); case StoreFactoryMode.MakingNewValue: return(new Impl.Factory <T>(valueFactory)); } throw new NotImplementedException($"Not implemented {nameof(mode)}=${mode}."); }
/// <summary> /// Конвертер StoreFactoryMode в DisposableStoreFactoryMode, тк смысл один и тоже, но /// </summary> public static DisposableStoreFactoryMode ToDisposableStoreFactoryMode(this StoreFactoryMode mode) { switch (mode) { case StoreFactoryMode.MakingNewValue: return(DisposableStoreFactoryMode.MakingNewValue); case StoreFactoryMode.StoringValueAndMakerWillDisposingValue: return(DisposableStoreFactoryMode.StoringValueAndMakerWillDisposingValue); } throw new NotImplementedException($"Not implemented {nameof(mode)}=${mode}."); }