예제 #1
0
        public static Task Execute(object obj, Action <object> reportExecuting = null, params object[] additionalParams)
        {
            var context = new ChainContext(obj, additionalParams);

            foreach (var chainServiceType in ChainContext.ChainServices)
            {
                var parameters = new List <object>();
                var ctor       = chainServiceType.GetConstructors().FirstOrDefault();
                if (ctor != null)
                {
                    var ctorParams = ctor.GetParameters();
                    if (ctorParams.Any())
                    {
                        foreach (var ctorParam in ctorParams)
                        {
                            parameters.Add(scope.ServiceProvider.GetService(ctorParam.ParameterType));
                        }
                    }
                }

                var chainService = Activator.CreateInstance(chainServiceType, parameters.ToArray()) as ChainService;
                chainService.Execute(context, reportExecuting);

                if (!chainService.nextAllowed)
                {
                    break;
                }
            }

            return(Task.CompletedTask);
        }
예제 #2
0
 protected internal abstract Task Execute(ChainContext context, Action <object> executedCallBack = null);