Пример #1
0
        public async Task <T> Run <T>(ISideEffect <T> sideEffect, CancellationToken cancellationToken = default)
        {
            var sideEffectHandlerType = GetSideEffectHandlerTypeFor(sideEffect.GetType());
            var sideEffectHandler     = _serviceProvider.GetRequiredService(sideEffectHandlerType) as ISideEffectHandler;

            if (sideEffectHandler == null)
            {
                throw new Exception($"Could not create a side effect handler for type {sideEffectHandlerType.Name}");
            }
            var mi   = sideEffectHandler.GetType().GetMethod("Handle");
            var task = mi.Invoke(sideEffectHandler, new object[] { sideEffect, cancellationToken }) as Task;

            //var task = sideEffectHandler.AsDynamic().Handle((sideEffect as dynamic), cancellationToken);
            if (typeof(T) == typeof(Unit))
            {
                await task;
                return(Unit.Value as dynamic);
            }
            else
            {
                var x = await(task as Task <T>);
                return(x);
            }
        }
Пример #2
0
 public static IEffect <T> Of <T>(ISideEffect <T> sideEffect)
 {
     return(new FreeEffect <T, T>(sideEffect, Pure));
 }
Пример #3
0
 public FreeEffect(ISideEffect <TOutput> sideEffect, Func <TOutput, IEffect <T> > next)
 {
     SideEffect = sideEffect;
     Next       = next;
 }
 public void AddSideEffect(ISideEffect sideEffect)
 {
     sideEffects.Add(sideEffect);
 }
Пример #5
0
 public MethodSideEffects(ISideEffect sideEffect)
 {
     _sideEffect = sideEffect;
     _rule       = QualityRules.SideEffect;
 }