/// <summary> /// Workaround for using the <see cref="Application"/> <see langword="class"/> for server startup. /// </summary> /// <param name="builder">The <see cref="IWebHostBuilder"/> to configure.</param> /// <param name="postSetupServices">The <see cref="IPostSetupServices"/> to use.</param> /// <returns>The configured <paramref name="builder"/>.</returns> public static IWebHostBuilder UseApplication(this IWebHostBuilder builder, IPostSetupServices postSetupServices) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } if (postSetupServices == null) { throw new ArgumentNullException(nameof(postSetupServices)); } return(builder.ConfigureServices((context, services) => { var application = new Application(context.Configuration, context.HostingEnvironment); application.ConfigureServices(services, postSetupServices); services.AddSingleton(application); }) .Configure(applicationBuilder => applicationBuilder .ApplicationServices .GetRequiredService <Application>() .Configure( applicationBuilder, applicationBuilder.ApplicationServices.GetRequiredService <IServerControl>(), applicationBuilder.ApplicationServices.GetRequiredService <ITokenFactory>(), applicationBuilder.ApplicationServices.GetRequiredService <IInstanceManager>(), applicationBuilder.ApplicationServices.GetRequiredService <IServerPortProvider>(), applicationBuilder.ApplicationServices.GetRequiredService <IOptions <ControlPanelConfiguration> >(), applicationBuilder.ApplicationServices.GetRequiredService <IOptions <GeneralConfiguration> >(), applicationBuilder.ApplicationServices.GetRequiredService <ILogger <Application> >()))); }
/// <summary> /// Configure the <see cref="Application"/>'s services. /// </summary> /// <param name="services">The <see cref="IServiceCollection"/> to configure.</param> /// <param name="postSetupServices">The <see cref="IPostSetupServices"/> needed for configuration.</param> public void ConfigureServices(IServiceCollection services, IPostSetupServices postSetupServices) { ConfigureServices(services); if (postSetupServices == null) { throw new ArgumentNullException(nameof(postSetupServices)); } // configure configuration services.UseStandardConfig <UpdatesConfiguration>(Configuration); services.UseStandardConfig <ControlPanelConfiguration>(Configuration); // enable options which give us config reloading services.AddOptions();
/// <summary> /// Configure the <see cref="Application"/>'s services. /// </summary> /// <param name="services">The <see cref="IServiceCollection"/> to configure.</param> /// <param name="postSetupServices">The <see cref="IPostSetupServices"/> needed for configuration.</param> public void ConfigureServices(IServiceCollection services, IPostSetupServices postSetupServices) { ConfigureServices(services); if (postSetupServices == null) { throw new ArgumentNullException(nameof(postSetupServices)); } // configure configuration services.UseStandardConfig <UpdatesConfiguration>(Configuration); services.UseStandardConfig <ControlPanelConfiguration>(Configuration); // enable options which give us config reloading services.AddOptions(); // Set the timeout for IHostedService.StopAsync services.Configure <HostOptions>( opts => opts.ShutdownTimeout = TimeSpan.FromMilliseconds(postSetupServices.GeneralConfiguration.RestartTimeout));
/// <summary> /// Adds the <see cref="IWatchdogFactory"/> implementation. /// </summary> /// <typeparam name="TSystemWatchdogFactory">The <see cref="WatchdogFactory"/> child <see langword="class"/> for the current system.</typeparam> /// <param name="services">The <see cref="IServiceCollection"/> to configure.</param> /// <param name="postSetupServices">The <see cref="IPostSetupServices"/> to use.</param> static void AddWatchdog <TSystemWatchdogFactory>(IServiceCollection services, IPostSetupServices postSetupServices) where TSystemWatchdogFactory : class, IWatchdogFactory { if (postSetupServices.GeneralConfiguration.UseBasicWatchdog) { services.AddSingleton <IWatchdogFactory, WatchdogFactory>(); } else { services.AddSingleton <IWatchdogFactory, TSystemWatchdogFactory>(); } }