public object Create(object parent, object configContext, XmlNode section) { var taskPersistenceProvider = this.Container.GetInstance <ITaskRepository>(); var dateTimeProvider = this.Container.GetInstance <IDateTimeProvider>(); var exceptionLogger = this.Container.GetInstance <IExceptionLogger>(); var tasks = new List <TaskRunner>(); foreach (XmlNode child in section.ChildNodes) { if (child.Name == "task") { if (child.Attributes["name"] == null || string.IsNullOrEmpty(child.Attributes["name"].Value)) { ServiceTaskConfigSectionHandler.RaiseException(child, "Attribute '{0}' expected on task element", "name"); } if (child.Attributes["target"] == null) { ServiceTaskConfigSectionHandler.RaiseException(child, "Attribute '{0}' expected on task element", "target"); } if (child.Attributes["type"] == null) { ServiceTaskConfigSectionHandler.RaiseException(child, "Attribute '{0}' expected on task element", "type"); } ITaskScheduler taskScheduler; switch (child.Attributes["type"].Value.Trim()) { case "IntervalTaskScheduler": taskScheduler = ServiceTaskConfigSectionHandler.GetPerformPerIntervalTaskType(child); break; case "EveryDayTaskScheduler": taskScheduler = ServiceTaskConfigSectionHandler.GetPerformEveryDay(child); break; case "DateEveryYearTaskScheduler": taskScheduler = ServiceTaskConfigSectionHandler.GetPerformDateEveryYear(child); break; case "EveryMonthTaskScheduler": taskScheduler = ServiceTaskConfigSectionHandler.GetPerformDateEveryMonth(child, this.Container); break; default: ServiceTaskConfigSectionHandler.RaiseException( child, "Attribute '{0}' expects a value of 'IntervalTaskScheduler' or 'EveryDayTaskScheduler' or 'DateEveryYearTaskScheduler'", "type"); taskScheduler = null; break; } var name = child.Attributes["name"].Value.Trim(); if (tasks.Any(x => x.Name.Equals(name))) { ServiceTaskConfigSectionHandler.RaiseException(child, "{0} is not unique ({1})", "name", name); } var serviceTaskType = ServiceTaskConfigSectionHandler.GetIServiceTaskType(child, child.Attributes["target"].InnerText); tasks.Add( new TaskRunner( name, serviceTaskType, taskScheduler, this.Container, taskPersistenceProvider, dateTimeProvider, exceptionLogger)); } } return(tasks); }