示例#1
0
        /// <summary>
        /// Constructs the task chain
        /// </summary>
        protected virtual void ResolveChain(string chainConfigurationAlias)
        {
            // Types from the merchello.config file
            var typeList = ChainTaskResolver.GetTypesForChain(chainConfigurationAlias).ToArray();

            if (!typeList.Any())
            {
                return;
            }

            // instantiate each task in the chain
            TaskHandlers.AddRange(
                typeList.Select(
                    typeName => new AttemptChainTaskHandler <T>(
                        ActivatorHelper.CreateInstance <AttemptChainTaskBase <T> >(
                            typeName,
                            ConstructorArgumentValues.ToArray()).Result
                        )));

            // register the next task for each link (these are linear chains)
            foreach (var taskHandler in TaskHandlers.Where(task => TaskHandlers.IndexOf(task) != TaskHandlers.IndexOf(TaskHandlers.Last())))
            {
                taskHandler.RegisterNext(TaskHandlers[TaskHandlers.IndexOf(taskHandler) + 1]);
            }
        }