private static IContainer CreateContainer(AnalysisOptionsBuilder options) { var builder = new ContainerBuilder(); builder.RegisterInstance <TextWriter>(Console.Out); builder.RegisterType <Program>() .AsSelf(); builder.RegisterInstance(options) .As <IReferenceAssemblyOptions>() .As <IAnalysisOptions>(); builder.RegisterModule <NuGetModule>(); builder.RegisterModule <AssemblyCompatibilityModule>(); builder.RegisterModule <RulesModule>(); builder.RegisterModule <RabbitMqModule>(); builder.RegisterModule <ProtobufModule>(); builder.RegisterModule <MongoDbModule>(); builder.RegisterType <RequestProcessor>() .As <IRequestProcessor>() .SingleInstance(); builder.RegisterAssemblyTypes(typeof(Program).Assembly) .Where(t => !t.IsAbstract && t.IsAssignableTo <ICommand>()) .Where(t => t.GetCustomAttribute <CommandAttribute>()?.Command == options.Command) .As <ICommand>(); return(builder.Build()); }
private static async Task Main(string[] args) { var version = typeof(Program).Assembly.GetName().Version; Console.WriteLine($"Package Compatibility Analyzer v{version}{Environment.NewLine}"); await Task.Delay(2000); try { var options = AnalysisOptionsBuilder.Parse(args); using (var container = CreateContainer(options)) { await container.Resolve <ICommand>().RunAsync(); } } catch (CompatibilityAnalysisException e) { Console.WriteLine(e.Message); } catch (Exception e) { Console.WriteLine(e); } }
public static AnalysisOptionsBuilder Parse(string[] args) { var options = new AnalysisOptionsBuilder(); var syntax = default(ArgumentSyntax); try { if (args.Length == 0) { return(options); } ArgumentSyntax.Parse(args, arg => { arg.HandleErrors = false; arg.DefineCommand("analyze", ref options._command, AnalysisCommand.Analyze, "Analyze packages"); arg.DefineOption("packageId", ref options._packageId, true, "NuGet package to analyze"); arg.DefineOption("original", ref options._originalVersion, true, "Original package"); arg.DefineOption("updated", ref options._updatedVersion, true, "Updated packages"); arg.DefineOption("feed", ref options._feed, false, "NuGet feed to use"); arg.DefineOption("verbose", ref options._verbose, false, "Turn verbose output on"); arg.DefineOption("ref", ref options._referencePath, false, "Zip archive of reference assemblies"); arg.DefineCommand("ref", ref options._command, AnalysisCommand.CollectReferenceAssemblies, "Collect reference assemblies"); arg.DefineOption("path", ref options._referencePath, true, "Path to save reference assembly collection"); arg.DefineCommand("monitor", ref options._command, AnalysisCommand.MonitorQueue, "Monitor queue"); syntax = arg; }); options.Validate(syntax); return(options); } catch (ArgumentSyntaxException e) { throw new ArgumentParsingException(syntax, e.Message); } }