Exemple #1
0
        /// <inheritdoc />
        protected override async Task <int> RunInternalAsync(
            string[] rawArguments,
            TArgs arguments,
            TConfiguration configuration,
            IConfigurationProvider <TConfiguration> configurationProvider,
            string customContentRootDirectory,
            CancellationToken cancellationToken = default)
        {
            var hostBuilder = Host.CreateDefaultBuilder(rawArguments);

            // configure configuration
            hostBuilder.ConfigureAppConfiguration((context, configurationBuilder) =>
            {
                var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
                context.HostingEnvironment.EnvironmentName = environment;
                configurationProvider.ConfigureAppConfiguration(configurationBuilder);
            });

            // configure services
            hostBuilder.ConfigureServices((context, services) =>
            {
                services.AddSingleton <ILogger>(c =>
                {
                    var loggerFactory = c.GetRequiredService <ILoggerFactory>();
                    return(loggerFactory.CreateLogger("main"));
                });
                services.AddLocalization(opt =>
                {
                    opt.ResourcesPath = "Resources";
                });
                _configureServiceAction?.Invoke(context, services);
                _configureServiceActionWithConfiguration?.Invoke(context, services, configuration);
                _configureServiceActionWithConfigurationAndArgs?.Invoke(context, services, configuration, arguments);
                services.AddAppInitialization();

                services.TryAddSingleton(configuration);
                services.TryAddSingleton(arguments);
                services.TryAddSingleton(configurationProvider);

                services.AddAppInitializer <FireAndForgetInitializer>();
                services.AddPerformanceMeasures();
            });

            // configure logging
            hostBuilder.ConfigureLogging((context, logging) =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(LogLevel.Trace);
                logging.AddNLog();
            });

            // configure host
            _configureHostAction?.Invoke(hostBuilder);

            // init and run
            var host = hostBuilder.Build();

            await host.InitAsync(cancellationToken);

            await host.RunAsync(cancellationToken);

            return(CuriosityExitCodes.Success);
        }
Exemple #2
0
        private static IHost CreateWebHost(
            string[] args,
            TArgs arguments,
            TConfiguration configuration,
            IConfigurationProvider <TConfiguration> configurationProvider,
            string?customContentRootDirectory)
        {
            var hostBuilder = Host.CreateDefaultBuilder(args);

            hostBuilder
            .ConfigureServices(services =>
            {
                if (configuration.UseIISIntegration)
                {
                    services.Configure <IISOptions>(options =>
                    {
                        options.AutomaticAuthentication  = false;
                        options.ForwardClientCertificate = false;
                    });
                }

                services.AddSingleton <ILogger>(c =>
                {
                    var loggerFactory = c.GetRequiredService <ILoggerFactory>();
                    return(loggerFactory.CreateLogger("main"));
                });

                services.TryAddSingleton(configuration);
                services.TryAddSingleton(arguments);

                // ReSharper disable once SuspiciousTypeConversion.Global
                if (configuration is IWebAppConfigurationWithPublicDomain publicDomainConfig)
                {
                    services.TryAddSingleton(publicDomainConfig);
                }

                services.TryAddSingleton(configurationProvider);
                services.AddAppInitialization();

                services.AddThreadPoolTuning(configuration.ThreadPool);
                services.AddAppInitializer <FireAndForgetInitializer>();
                services.AddPerformanceMeasures();
            })
            .ConfigureAppConfiguration((context, configurationBuilder) =>
            {
                var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
                context.HostingEnvironment.EnvironmentName = environment;
                configurationProvider.ConfigureAppConfiguration(configurationBuilder);
            })
            .ConfigureLogging(logging =>
            {
                logging.ClearProviders();
                logging.SetMinimumLevel(LogLevel.Trace);
            });

            hostBuilder.ConfigureWebHost(webHostBuilder =>
            {
                // enable IIS integration on demand
                if (configuration.UseIISIntegration)
                {
                    webHostBuilder.UseIISIntegration();
                    webHostBuilder.UseKestrel();
                }
                else
                {
                    // use specified kestrel options
                    if (configuration.Kestrel != null)
                    {
                        webHostBuilder
                        .UseKestrel((context, severOptions) =>
                        {
                            // pass "raw" configuration section instead of pass POCO, because we don't need all options available from code
                            // Kestrel will find all necessary options
                            severOptions.Configure(configurationProvider.GetRawConfiguration().GetSection("Kestrel"));
                        });
                    }
                    else // or just basic kestrel options with specified urls
                    {
                        webHostBuilder
                        .UseKestrel()
                        .UseUrls(configuration.Urls);
                    }
                }

                webHostBuilder
                .UseNLog()
                .UseStartup <TStartup>();
            });

            if (!String.IsNullOrWhiteSpace(customContentRootDirectory))
            {
                hostBuilder.UseContentRoot(customContentRootDirectory);
            }

            return(hostBuilder.Build());
        }