コード例 #1
0
ファイル: Stage.cs プロジェクト: K1llMan/ETLManager
        public Stage(JProperty stage, ETLProgram program)
        {
            ID = stage.Name;

            JToken stageDesc = stage.Value;

            Enabled = Convert.ToBoolean(stageDesc["enabled"]);
            // Установка статусов по умолчанию
            Status     = StageStatus.Successful;
            ExecStatus = Enabled ? StageExecutionStatus.InQueue : StageExecutionStatus.Skipped;

            Name = stageDesc["name"].ToString();

            // Формирование списка параметров этапа
            Parameters = FormParamsList(stageDesc["params"]);

            RootProgram = program;

            // Привязка метода объекта программы к этапу
            string functName = stageDesc["func"].ToString();

            if (string.IsNullOrEmpty(functName))
            {
                Logger.WriteToTrace("Не задана функция выполнения этапа.", TraceMessageKind.Warning);
                return;
            }

            MethodInfo method = program.GetType().GetMethod(functName);

            if (method == null)
            {
                Logger.WriteToTrace($"Не найдена функция выполнения \"{functName}\" этапа \"{ID}\".", TraceMessageKind.Warning);
                return;
            }

            Method = (StageFunc)method.CreateDelegate(typeof(StageFunc), program);
        }
コード例 #2
0
        private static void Init(decimal sessNo, string id, string moduleName)
        {
            Logger.Initialize($"{sessNo}", Path.Combine(context.Settings.Registry.LogsPath, id), true);
            Logger.WriteToTrace($"Инициализация закачки \"{id}\"...", TraceMessageKind.Information);

            // Получаем описание закачки и загружаем модуль с кодом
            string module = Path.Combine(context.Settings.Registry.ModulesPath, moduleName);

            if (!File.Exists(module))
            {
                throw new Exception($"Не обнаружен программный модуль \"{moduleName}\".");
            }

            Assembly assembly = Assembly.LoadFile(module);
            Type     type     = assembly.GetTypes().FirstOrDefault(t => typeof(ETLProgram).IsAssignableFrom(t));

            if (type == null)
            {
                throw new Exception($"В модуле \"{moduleName}\" отсутствуют типы, реализующие программу закачки.");
            }

            program = (ETLProgram)assembly.CreateInstance(type.FullName, false, BindingFlags.CreateInstance, null,
                                                          null, CultureInfo.CurrentCulture, null);
        }