protected override void Load(ContainerBuilder builder) { // Cfg-Net Setup for Cfg builder.RegisterType <FileReader>().As <IReader>(); builder.Register(ctx => _logger ?? new NLogPipelineLogger(ProcessName)).As <IPipelineLogger>().SingleInstance(); builder.Register((ctx, p) => _jr ?? p.TypedAs <Request>()).As <Request>(); builder.Register((ctx, p) => { var entityName = ctx.Resolve <Request>(p).FileInfo.Name; return(new PipelineContext( ctx.Resolve <IPipelineLogger>(), new Process { Name = ProcessName }, new Entity { Name = entityName, Alias = entityName, Key = entityName } )); }).As <IContext>().InstancePerLifetimeScope(); builder.Register((ctx, p) => { var request = ctx.Resolve <Request>(p); var cfg = new Cfg(request.Configuration, ctx.Resolve <IReader>()); // modify the input provider based on the file name requested var input = cfg.Input(); input.File = request.FileInfo.FullName; if (request.Extension.StartsWith(".xls", StringComparison.OrdinalIgnoreCase)) { input.Provider = "excel"; } // modify the output connection var output = cfg.Output(); if (!string.IsNullOrEmpty(request.Provider) && Constants.AdoProviderSet().Contains(request.Provider)) { output.Provider = request.Provider; } SetOption(() => request.Server, option => { output.Server = option; }); SetOption(() => request.Database, option => { output.Database = option; }); SetOption(() => request.DatabaseFile, option => { output.File = option; }); SetOption(() => request.View, option => { output.Table = option; }); SetOption(() => request.Schema, option => { output.Schema = option; }); SetOption(() => request.User, option => { output.User = option; }); SetOption(() => request.Password, option => { output.Password = option; }); SetOption(() => request.Port, option => { output.Port = option; }); // modify the types if provided from command line if (request.Types == null || !request.Types.Any(t => Constants.TypeSet().Contains(t))) { return(cfg); } var context = ctx.Resolve <IContext>(); context.Debug(() => "Manually over-riding types."); cfg.Input().Types.Clear(); foreach (var type in request.Types.Where(type => Constants.TypeSet().Contains(type))) { cfg.Input().Types.Add(new TflType(type)); context.Debug(() => $"Inspecting for type: {type}."); } return(cfg); }).As <Cfg>().InstancePerLifetimeScope(); builder.Register((ctx, p) => { var process = new Process(); if (p.Any()) { process.Load(p.Named <string>("cfg")); } return(process); }).As <Process>(); }