public void Execute(Process process) { process.Mode = _mode; // Since we're in a Console app, and honor output format if (process.Output().Provider.In("internal", "console")) { process.Output().Provider = "console"; process.Output().Format = _format; } var logger = new NLogPipelineLogger(SlugifyTransform.Slugify(_cfg)); if (!string.IsNullOrEmpty(process.MaxMemory)) { var context = new PipelineContext(logger, process); var timer = new Stopwatch(); timer.Start(); GC.Collect(); GC.WaitForPendingFinalizers(); timer.Stop(); context.Info($"Collected free memory. Time taken: {timer.Elapsed}."); var currentBytes = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64.Bytes(); var maxMemory = ByteSize.Parse(process.MaxMemory); if (maxMemory.CompareTo(currentBytes) < 0) { context.Error($"Process exceeded {maxMemory.Megabytes.ToString("#.0")} Mb. Current memory is {currentBytes.Megabytes.ToString("#.0")} Mb!"); Environment.Exit(1); } else { context.Info($"The process is using {currentBytes.Megabytes.ToString("#.0")} Mb of it's max {maxMemory.Megabytes.ToString("#.0")} Mb allowed."); } } var builder = new ContainerBuilder(); builder.RegisterInstance(logger).As <IPipelineLogger>().SingleInstance(); builder.RegisterCallback(new RootModule(process.Shorthand).Configure); builder.RegisterCallback(new ContextModule(process).Configure); // providers builder.RegisterCallback(new AdoModule(process).Configure); builder.RegisterCallback(new LuceneModule(process).Configure); builder.RegisterCallback(new SolrModule(process).Configure); builder.RegisterCallback(new ElasticModule(process).Configure); builder.RegisterCallback(new InternalModule(process).Configure); builder.RegisterCallback(new FileModule(process).Configure); builder.RegisterCallback(new FolderModule(process).Configure); builder.RegisterCallback(new DirectoryModule(process).Configure); builder.RegisterCallback(new ExcelModule(process).Configure); builder.RegisterCallback(new WebModule(process).Configure); builder.RegisterCallback(new MapModule(process).Configure); builder.RegisterCallback(new TemplateModule(process).Configure); builder.RegisterCallback(new ActionModule(process).Configure); builder.RegisterCallback(new EntityPipelineModule(process).Configure); builder.RegisterCallback(new ProcessPipelineModule(process).Configure); builder.RegisterCallback(new ProcessControlModule(process).Configure); using (var scope = builder.Build().BeginLifetimeScope()) { try { scope.Resolve <IProcessController>().Execute(); } catch (Exception ex) { scope.Resolve <IContext>().Error(ex.Message); } } }