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; }
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)); }
public UnrealParameters( IServiceProvider serviceProvider, ILogger <ITaskParameters> logger, ExportCatalog exports, ITaskOptions options) : base(serviceProvider, logger, exports, options) { }
public TaskParameters( IServiceProvider serviceProvider, ILogger <ITaskParameters> logger, ExportCatalog exports, ITaskOptions options) { ServiceProvider = serviceProvider; Log = logger; Exports = exports; Options = options; }
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(); } }