Exemplo n.º 1
0
        public TaskBootstrap(TaskCatalog taskCatalog, ExportCatalog exports, string taskName, string taskOptionsFile)
        {
            if (!string.IsNullOrEmpty(taskName) && !taskCatalog.HasNamedTask(taskName))
            {
                throw new Exception($"No task found with name {taskName}. Are you sure the task has an [Export] attribute?");
            }

            //if(!File.Exists(taskOptionsFile))
            //    throw new Exception($"Task options were not defined or the file was not found.");

            Exports = exports;

            Task = taskCatalog[taskName];
            if (Task == null)
            {
                throw new NullReferenceException($"Default task not found. Do the referenced dll's have an [Export] attribute?");
            }

            ITaskOptions taskOptions = null;

            if (!string.IsNullOrEmpty(taskOptionsFile))
            {
                var optionsStr = File.ReadAllText(taskOptionsFile);
                taskOptions = JsonConvert.DeserializeObject(optionsStr, Task.OptionsType) as ITaskOptions;
                if (taskOptions == null)
                {
                    throw new JsonReaderException($"TaskOptions not parsed.");
                }
            }

            Options = taskOptions;
        }
Exemplo n.º 2
0
        public async Task <bool> Run(ITask task, ExportCatalog exports, ITaskOptions options)
        {
            if (options != null)
            {
                ServiceCollection.AddSingleton(options);
                ServiceCollection.AddSingleton(typeof(ITaskOptions), options);
            }
            else
            {
                ServiceCollection.AddSingleton <ITaskOptions, EmptyTaskOptions>();
            }

            if (task.ParameterType != null)
            {
                ServiceCollection.AddSingleton(task.ParameterType);
                ServiceCollection.AddSingleton(typeof(ITaskParameters), task.ParameterType);
            }

            ServiceCollection.AddConfigurations(task.GetType().Assembly);
            ServiceProvider = ServiceCollection.BuildServiceProvider();

            var taskParameterType = task.ParameterType ?? typeof(TaskParameters);
            var parameters        = (ITaskParameters)ServiceProvider.GetService(taskParameterType);

            parameters.PostSetup(ServiceProvider);

            return(await task.Run(parameters));
        }
Exemplo n.º 3
0
 public UnrealParameters(
     IServiceProvider serviceProvider,
     ILogger <ITaskParameters> logger,
     ExportCatalog exports,
     ITaskOptions options)
     : base(serviceProvider, logger, exports, options)
 {
 }
Exemplo n.º 4
0
        public TaskParameters(
            IServiceProvider serviceProvider,
            ILogger <ITaskParameters> logger,
            ExportCatalog exports,
            ITaskOptions options)
        {
            ServiceProvider = serviceProvider;

            Log = logger;

            Exports = exports;
            Options = options;
        }
Exemplo n.º 5
0
        public Application(Options options)
        {
            var entityPaths = options.EntityPaths.Split(',');

            var services = new ServiceCollection();

            services.AddConfigurations(typeof(Application).Assembly);
            services.AddSingleton(p =>
            {
                var result = new ExportCatalog(p.GetService <DefaultMetadataProvider>());
                result.FindInAssemblies(entityPaths);
                return(result);
            });

            var serviceProvider = services.BuildServiceProvider();
            var exportCatalog   = serviceProvider.GetService <ExportCatalog>();

            Log = serviceProvider.GetService <ILogger <Application> >();
            Log.LogInformation($"{exportCatalog.ToList<Type>().Count} entities found in {entityPaths.FirstOrDefault()}.");

            if (string.IsNullOrEmpty(options.TaskPaths))
            {
                Log.LogWarning("No task or task assemblies specified, running validation only.");

                exportCatalog.IsValid(serviceProvider.GetService <ILogger <IValidatable> >());
            }
            else
            {
                var taskCatalog = serviceProvider.GetService <TaskCatalog>();
                taskCatalog.Compose(services, options.TaskPaths.Split(','));

                var taskRunner    = new TaskRunner(services);
                var taskBootstrap = new TaskBootstrap(taskCatalog, exportCatalog, options.Task, options.TaskOptions);

                taskBootstrap.Run(taskRunner).Wait();
            }
        }