/// <summary> /// Initializes a new instance of the <see cref="TaskManager"/> /// </summary> /// <param name="taskRepository">A <see cref="ITaskRepository"/> to load / save <see cref="Task">tasks</see></param> /// <param name="taskScheduler">A <see cref="ITaskScheduler"/> for executing tasks and their operations</param> /// <param name="typeImporter">A <see cref="ITypeImporter"/> used for importing <see cref="ITaskStatusReporter"/></param> /// <param name="container">A <see cref="IContainer"/> to use for getting instances</param> public TaskManager(ITaskRepository taskRepository, ITaskScheduler taskScheduler, ITypeImporter typeImporter, IContainer container) { _taskRepository = taskRepository; _taskScheduler = taskScheduler; _container = container; _reporters = typeImporter.ImportMany <ITaskStatusReporter>(); }
public string Generate() { var typesByNamespace = _typeDiscoverer.FindMultiple <ICommand>().Where(t => !_namespacesToExclude.Any(n => t.Namespace.StartsWith(n))).GroupBy(t => t.Namespace); var commandPropertyExtenders = _typeImporter.ImportMany <ICanExtendCommandProperty>(); var result = new StringBuilder(); Namespace currentNamespace; Namespace globalCommands = _codeGenerator.Namespace(Namespaces.COMMANDS); foreach (var @namespace in typesByNamespace) { if (_configuration.NamespaceMapper.CanResolveToClient(@namespace.Key)) { currentNamespace = _codeGenerator.Namespace(_configuration.NamespaceMapper.GetClientNamespaceFrom(@namespace.Key)); } else { currentNamespace = globalCommands; } foreach (var type in @namespace) { if (type.IsGenericType) { continue; } var name = type.Name.ToCamelCase(); currentNamespace.Content.Assign(name) .WithType(t => t.WithSuper("Bifrost.commands.Command") .Function .Body .Variant("self", v => v.WithThis()) .Property("_name", p => p.WithString(name)) .Property("_generatedFrom", p => p.WithString(type.FullName)) .WithObservablePropertiesFrom(type, excludePropertiesFrom: typeof(ICommand), observableVisitor: (propertyName, observable) => { foreach (var commandPropertyExtender in commandPropertyExtenders) { commandPropertyExtender.Extend(type, propertyName, observable); } })); } if (currentNamespace != globalCommands) { result.Append(_codeGenerator.GenerateFrom(currentNamespace)); } } result.Append(_codeGenerator.GenerateFrom(globalCommands)); return(result.ToString()); }
private void Initialize() { _invokers = _importer.ImportMany <ICommandHandlerInvoker>(); }