Exemplo n.º 1
0
        /// <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}.");
        }
Exemplo n.º 2
0
 /// <summary>
 /// Создает хранящую фабрику из значения value.
 /// Смотри описание DisposableStoreFactoryMode
 /// </summary>
 public static IDisposableStoreFactory <T> Make <T>(T value, DisposableStoreFactoryMode mode) where T : class, IDisposable
 {
     return(MakeDisposable(value, mode));
 }
Exemplo n.º 3
0
        /// <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}.");
        }