public void Build_WithStartup_StartupCreatedAndCalled() { var builder = new ConsoleAppBuilder(Array.Empty <string>()); builder.UseProgramMain <TestProgramMain>(); builder.UseStartup <TestStartup>(); // Act var _ = builder.Build(); // Assert TestStartup.ConfigureServicesIsCalled .Should() .BeTrue(); }
///------------------------------------------------------------------------------------------------- /// <summary> Setups the ConsoleAppBuilder to use CLI actions for execution. </summary> /// /// <typeparam name="TCliStartup"> Type of the CLI startup. </typeparam> /// <param name="consoleAppBuilder"> The consoleAppBuilder to act on. </param> /// /// <returns> A ConsoleAppBuilder. </returns> ///------------------------------------------------------------------------------------------------- public static ConsoleAppBuilder UseActions <TCliStartup>(this ConsoleAppBuilder consoleAppBuilder) where TCliStartup : class, ICliStartup, new() { return(consoleAppBuilder .UseStartup <TCliStartup>() .ConfigureServices(services => services.AddCliActions()) .UseExecutor(sp => { var runtimeBuilder = sp.GetRequiredService <ICliActionRuntimeBuilder>(); var startup = sp.GetRequiredService <IStartup>() as ICliStartup; startup?.Configure(runtimeBuilder); var runtime = runtimeBuilder.Build(); return new CliActionsExecutor(runtime); })); }
///------------------------------------------------------------------------------------------------- /// <summary> Setups the ConsoleAppBuilder to use CLI actions for execution. </summary> /// /// <typeparam name="TStartup"> Type of the startup. </typeparam> /// <param name="consoleAppBuilder"> The consoleAppBuilder to act on. </param> /// <param name="setupRuntime"> Action for setting up the runtime. </param> /// /// <returns> A ConsoleAppBuilder. </returns> ///------------------------------------------------------------------------------------------------- public static ConsoleAppBuilder UseSimpleActions <TStartup>(this ConsoleAppBuilder consoleAppBuilder, Action <ICliActionRuntimeBuilder> setupRuntime) where TStartup : class, IStartup, new() { Ensure.NotNull(setupRuntime, nameof(setupRuntime)); return(consoleAppBuilder .UseStartup <TStartup>() .ConfigureServices(services => services.AddCliActions()) .UseExecutor(sp => { var runtimeBuilder = sp.GetRequiredService <ICliActionRuntimeBuilder>(); setupRuntime(runtimeBuilder); var runtime = runtimeBuilder.Build(); return new CliActionsExecutor(runtime); })); }