/// <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); }
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()); }