Esempio n. 1
0
        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);
        }