private IServiceProvider Build(string[] args, Type[] commandTypes, Action <CoconaLiteAppOptions>?configureOptions) { var services = new CoconaLiteServiceCollection(); var options = new CoconaLiteAppOptions() { CommandTypes = commandTypes, }; configureOptions?.Invoke(options); services.AddSingleton(options); services.AddCoconaCore(args); services.AddCoconaShellCompletion(); _configureServicesDelegate?.Invoke(services); var serviceProvider = new CoconaLiteServiceProvider(services); serviceProvider.GetService <ICoconaCommandDispatcherPipelineBuilder>() .UseMiddleware <HandleExceptionAndExitMiddleware>() .UseMiddleware <HandleParameterBindExceptionMiddleware>() .UseMiddleware <RejectUnknownOptionsMiddleware>() .UseMiddleware <CommandFilterMiddleware>() .UseMiddleware((next, sp) => new InitializeCoconaLiteConsoleAppMiddleware(next, sp.GetService <ICoconaAppContextAccessor>())) .UseMiddleware <CoconaCommandInvokeMiddleware>(); return(serviceProvider); }
private IServiceProvider Build(string[] args, Type[] commandTypes, Action <CoconaLiteAppOptions>?configureOptions) { var services = new CoconaLiteServiceProvider(); var options = new CoconaLiteAppOptions() { CommandTypes = commandTypes, }; configureOptions?.Invoke(options); services.AddSingleton(options); services.AddSingleton <ICoconaInstanceActivator>(_ => new CoconaLiteInstanceActivator()); services.AddSingleton <ICoconaCommandLineArgumentProvider>(sp => new CoconaCommandLineArgumentProvider(args)); services.AddSingleton <ICoconaCommandProvider>(sp => { var options = (CoconaLiteAppOptions)sp.GetService(typeof(CoconaLiteAppOptions)); return(new CoconaBuiltInCommandProvider( new CoconaCommandProvider( options.CommandTypes.ToArray(), options.TreatPublicMethodsAsCommands, options.EnableConvertOptionNameToLowerCase, options.EnableConvertCommandNameToLowerCase ) )); }); services.AddSingleton <ICoconaCommandDispatcherPipelineBuilder>(sp => new CoconaCommandDispatcherPipelineBuilder(sp, sp.GetService <ICoconaInstanceActivator>())); services.AddSingleton <ICoconaAppContextAccessor>(sp => new CoconaAppContextAccessor()); services.AddSingleton <ICoconaApplicationMetadataProvider>(sp => new CoconaApplicationMetadataProvider()); services.AddSingleton <ICoconaConsoleProvider>(sp => new CoconaConsoleProvider()); services.AddSingleton <ICoconaParameterValidatorProvider>(sp => new DataAnnotationsParameterValidatorProvider()); services.AddSingleton <ICoconaParameterBinder>(sp => new CoconaParameterBinder(sp, sp.GetService <ICoconaValueConverter>(), sp.GetService <ICoconaParameterValidatorProvider>())); services.AddSingleton <ICoconaValueConverter>(sp => new CoconaValueConverter()); services.AddSingleton <ICoconaCommandLineParser>(sp => new CoconaCommandLineParser()); services.AddSingleton <ICoconaCommandDispatcher>(sp => new CoconaCommandDispatcher(sp, sp.GetService <ICoconaCommandProvider>(), sp.GetService <ICoconaCommandLineParser>(), sp.GetService <ICoconaCommandLineArgumentProvider>(), sp.GetService <ICoconaCommandDispatcherPipelineBuilder>(), sp.GetService <ICoconaCommandMatcher>(), sp.GetService <ICoconaInstanceActivator>(), sp.GetService <ICoconaAppContextAccessor>())); services.AddSingleton <ICoconaCommandMatcher>(sp => new CoconaCommandMatcher()); services.AddSingleton <ICoconaHelpRenderer>(sp => new CoconaHelpRenderer()); services.AddSingleton <ICoconaCommandHelpProvider>(sp => new CoconaCommandHelpProvider(sp.GetService <ICoconaApplicationMetadataProvider>(), sp)); _configureServicesDelegate?.Invoke(services); IServiceProvider serviceProvider = services; serviceProvider.GetService <ICoconaCommandDispatcherPipelineBuilder>() .UseMiddleware <BuiltInCommandMiddleware>() .UseMiddleware <HandleExceptionAndExitMiddleware>() .UseMiddleware <HandleParameterBindExceptionMiddleware>() .UseMiddleware <RejectUnknownOptionsMiddleware>() .UseMiddleware <CommandFilterMiddleware>() .UseMiddleware((next, sp) => new InitializeCoconaLiteConsoleAppMiddleware(next, sp.GetService <ICoconaAppContextAccessor>())) .UseMiddleware <CoconaCommandInvokeMiddleware>(); return(serviceProvider); }