/// <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();
示例#3
0
        /// <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));
示例#4
0
 /// <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>();
     }
 }