/// <summary> /// Создает хранящую фабрику из значения value. /// Смотри описание DisposableStoreFactoryMode /// </summary> public static IDisposableStoreFactory <T> MakeDisposable <T>(T value, DisposableStoreFactoryMode mode = DisposableStoreFactoryMode.StoringValueAndMakerWillDisposingValue) where T : class, IDisposable { switch (mode) { case DisposableStoreFactoryMode.StoringAndDisposingValue: return(new Impl.DisposableStoreFactory <T>(value)); case DisposableStoreFactoryMode.StoringValueAndMakerWillDisposingValue: return(new Impl.NotNeedDisposeStoreFactoryAdapter <T>(new Impl.Stored <T>(value))); case DisposableStoreFactoryMode.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> /// Создает хранящую фабрику из значения value. /// Смотри описание DisposableStoreFactoryMode /// </summary> public static IDisposableStoreFactory <T> Make <T>(T value, DisposableStoreFactoryMode mode) where T : class, IDisposable { return(MakeDisposable(value, mode)); }
/// <summary> /// Создает хранящую фабрику из функтора valueFactory. /// Смотри описание DisposableStoreFactoryMode /// </summary> public static IDisposableStoreFactory <T> MakeDisposable <T>(Func <T> valueFactory, DisposableStoreFactoryMode mode = DisposableStoreFactoryMode.MakingNewValue) where T : class, IDisposable { switch (mode) { case DisposableStoreFactoryMode.StoringAndDisposingValue: return(new Impl.DisposableStoreFactory <T>(valueFactory())); case DisposableStoreFactoryMode.StoringValueAndMakerWillDisposingValue: return(new Impl.NotNeedDisposeStoreFactoryAdapter <T>(new Impl.Stored <T>(valueFactory is null ? throw new ArgumentNullException($"Not supported null {nameof(valueFactory)}") : valueFactory()))); case DisposableStoreFactoryMode.MakingNewValue: return(new Impl.NotNeedDisposeStoreFactoryAdapter <T>(new Impl.Factory <T>(valueFactory))); } throw new NotImplementedException($"Not implemented {nameof(mode)}=${mode}."); }