/// <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]); } }