public static ILifetimeScope Create(Process process, IPipelineLogger logger, string placeHolderStyle) { var loadContext = new PipelineContext(logger, process); if (process.OutputIsConsole()) { logger.SuppressConsole(); } var builder = new ContainerBuilder(); builder.Properties["Process"] = process; builder.Register(ctx => placeHolderStyle).Named <string>("placeHolderStyle"); builder.RegisterInstance(logger).As <IPipelineLogger>().SingleInstance(); /* this stuff is loaded (again) because tfl actions can create processes, which will need short-hand to expand configuration in advance */ builder.RegisterCallback(new TransformModule(process, logger).Configure); builder.RegisterCallback(new ValidateModule(process, logger).Configure); builder.RegisterCallback(new RootModule().Configure); builder.RegisterCallback(new ContextModule(process).Configure); // provider loading section var providers = new HashSet <string>(process.Connections.Select(c => c.Provider).Distinct(), StringComparer.OrdinalIgnoreCase); builder.RegisterCallback(new InternalModule(process).Configure); builder.RegisterCallback(new FileModule(process).Configure); if (providers.Contains("console")) { builder.RegisterCallback(new ConsoleModule(process).Configure); } if (providers.Contains("kml")) { builder.RegisterCallback(new KmlModule(process).Configure); } if (providers.Contains("filesystem")) { builder.RegisterCallback(new FileSystemModule(process).Configure); } var pluginsFolder = Path.Combine(AssemblyDirectory, "plugins"); if (Directory.Exists(pluginsFolder)) { var assemblies = new List <Assembly>(); var files = Directory.GetFiles(pluginsFolder, "Transformalize.Provider.*.Autofac.dll", SearchOption.TopDirectoryOnly); foreach (var file in files) { var info = new FileInfo(file); var name = info.Name.ToLower().Split('.').FirstOrDefault(f => f != "dll" && f != "transformalize" && f != "provider" && f != "autofac"); // temporary hack if (name.StartsWith("amazonkinesis")) { name = name.Replace("amazonkinesis", string.Empty); } switch (name) { case "filehelpers" when(providers.Contains("file") || providers.Contains("folder")): loadContext.Debug(() => "Loading filehelpers provider"); assemblies.Add(Assembly.LoadFile(new FileInfo(file).FullName)); break; case "ado": loadContext.Debug(() => "Loading ADO provider"); assemblies.Add(Assembly.LoadFile(new FileInfo(file).FullName)); break; default: if (providers.Contains(name)) { loadContext.Debug(() => $"Loading {name} provider."); var assembly = Assembly.LoadFile(new FileInfo(file).FullName); assemblies.Add(assembly); } else { loadContext.Debug(() => $"Loading {name} isn't necessary for this arrangement."); } break; } } if (assemblies.Any()) { builder.RegisterAssemblyModules(assemblies.ToArray()); } } // etc builder.RegisterCallback(new EntityPipelineModule(process).Configure); builder.RegisterCallback(new ProcessPipelineModule(process).Configure); builder.RegisterCallback(new ProcessControlModule(process).Configure); return(builder.Build().BeginLifetimeScope()); }
public static ILifetimeScope Create(Process process, IPipelineLogger logger, string placeHolderStyle) { var loadContext = new PipelineContext(logger, process); if (process.OutputIsConsole()) { logger.SuppressConsole(); } var builder = new ContainerBuilder(); builder.Properties["Process"] = process; builder.Register(ctx => placeHolderStyle).Named <string>("placeHolderStyle"); builder.RegisterInstance(logger).As <IPipelineLogger>().SingleInstance(); /* this stuff is loaded (again) because tfl actions can create processes, which will need short-hand to expand configuration in advance */ builder.RegisterCallback(new TransformModule(process, logger).Configure); builder.RegisterCallback(new ShorthandTransformModule().Configure); builder.RegisterCallback(new ValidateModule().Configure); builder.RegisterCallback(new ShorthandValidateModule().Configure); builder.RegisterCallback(new RootModule().Configure); builder.RegisterCallback(new ContextModule(process).Configure); // provider loading section var providers = new HashSet <string>(process.Connections.Select(c => c.Provider).Distinct(), StringComparer.OrdinalIgnoreCase); builder.RegisterCallback(new InternalModule(process).Configure); builder.RegisterCallback(new AdoModule(process).Configure); if (providers.Contains("console")) { builder.RegisterCallback(new ConsoleModule(process).Configure); } if (providers.Contains("file")) { builder.RegisterCallback(new FileModule(process).Configure); } if (providers.Contains("geojson")) { builder.RegisterCallback(new GeoJsonModule(process).Configure); } if (providers.Contains("kml")) { builder.RegisterCallback(new KmlModule(process).Configure); } if (providers.Contains("folder")) { builder.RegisterCallback(new FolderModule(process).Configure); } if (providers.Contains("filesystem")) { builder.RegisterCallback(new FileSystemModule(process).Configure); } if (providers.Contains("excel")) { builder.RegisterCallback(new ExcelModule(process).Configure); } if (providers.Contains("web")) { builder.RegisterCallback(new WebModule(process).Configure); } if (providers.Contains("rethinkdb")) { builder.RegisterCallback(new RethinkDBModule(process).Configure); } var pluginsFolder = Path.Combine(AssemblyDirectory, "plugins"); if (Directory.Exists(pluginsFolder)) { var assemblies = new List <Assembly>(); foreach (var file in Directory.GetFiles(pluginsFolder, "Transformalize.Provider.*.Autofac.dll", SearchOption.TopDirectoryOnly)) { var info = new FileInfo(file); var name = info.Name.ToLower().Split('.').FirstOrDefault(f => f != "dll" && f != "transformalize" && f != "provider" && f != "autofac"); if (!providers.Contains(name)) { continue; } loadContext.Debug(() => $"Loading {name} provider"); var assembly = Assembly.LoadFile(new FileInfo(file).FullName); assemblies.Add(assembly); } if (assemblies.Any()) { builder.RegisterAssemblyModules(assemblies.ToArray()); } } // template providers builder.RegisterCallback(new RazorModule(process).Configure); // etc 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); return(builder.Build().BeginLifetimeScope()); }