Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
126 lines (113 sloc)
6.77 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Copyright (c) .NET Foundation. All rights reserved. | |
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. | |
using System.IO; | |
using System.Reflection; | |
using System.Runtime.InteropServices; | |
using Microsoft.Extensions.Configuration; | |
using Microsoft.Extensions.Logging; | |
using Microsoft.Extensions.Logging.EventLog; | |
namespace Microsoft.Extensions.Hosting | |
{ | |
/// <summary> | |
/// Provides convenience methods for creating instances of <see cref="IHostBuilder"/> with pre-configured defaults. | |
/// </summary> | |
public static class Host | |
{ | |
/// <summary> | |
/// Initializes a new instance of the <see cref="HostBuilder"/> class with pre-configured defaults. | |
/// </summary> | |
/// <remarks> | |
/// The following defaults are applied to the returned <see cref="HostBuilder"/>: | |
/// <list type="bullet"> | |
/// <item><description>set the <see cref="IHostEnvironment.ContentRootPath"/> to the result of <see cref="Directory.GetCurrentDirectory()"/></description></item> | |
/// <item><description>load host <see cref="IConfiguration"/> from "DOTNET_" prefixed environment variables</description></item> | |
/// <item><description>load app <see cref="IConfiguration"/> from 'appsettings.json' and 'appsettings.[<see cref="IHostEnvironment.EnvironmentName"/>].json'</description></item> | |
/// <item><description>load app <see cref="IConfiguration"/> from User Secrets when <see cref="IHostEnvironment.EnvironmentName"/> is 'Development' using the entry assembly</description></item> | |
/// <item><description>load app <see cref="IConfiguration"/> from environment variables</description></item> | |
/// <item><description>configure the <see cref="ILoggerFactory"/> to log to the console, debug, and event source output</description></item> | |
/// <item><description>enables scope validation on the dependency injection container when <see cref="IHostEnvironment.EnvironmentName"/> is 'Development'</description></item> | |
/// </list> | |
/// </remarks> | |
/// <returns>The initialized <see cref="IHostBuilder"/>.</returns> | |
public static IHostBuilder CreateDefaultBuilder() => | |
CreateDefaultBuilder(args: null); | |
/// <summary> | |
/// Initializes a new instance of the <see cref="HostBuilder"/> class with pre-configured defaults. | |
/// </summary> | |
/// <remarks> | |
/// The following defaults are applied to the returned <see cref="HostBuilder"/>: | |
/// <list type="bullet"> | |
/// <item><description>set the <see cref="IHostEnvironment.ContentRootPath"/> to the result of <see cref="Directory.GetCurrentDirectory()"/></description></item> | |
/// <item><description>load host <see cref="IConfiguration"/> from "DOTNET_" prefixed environment variables</description></item> | |
/// <item><description>load host <see cref="IConfiguration"/> from supplied command line args</description></item> | |
/// <item><description>load app <see cref="IConfiguration"/> from 'appsettings.json' and 'appsettings.[<see cref="IHostEnvironment.EnvironmentName"/>].json'</description></item> | |
/// <item><description>load app <see cref="IConfiguration"/> from User Secrets when <see cref="IHostEnvironment.EnvironmentName"/> is 'Development' using the entry assembly</description></item> | |
/// <item><description>load app <see cref="IConfiguration"/> from environment variables</description></item> | |
/// <item><description>load app <see cref="IConfiguration"/> from supplied command line args</description></item> | |
/// <item><description>configure the <see cref="ILoggerFactory"/> to log to the console, debug, and event source output</description></item> | |
/// <item><description>enables scope validation on the dependency injection container when <see cref="IHostEnvironment.EnvironmentName"/> is 'Development'</description></item> | |
/// </list> | |
/// </remarks> | |
/// <param name="args">The command line args.</param> | |
/// <returns>The initialized <see cref="IHostBuilder"/>.</returns> | |
public static IHostBuilder CreateDefaultBuilder(string[] args) | |
{ | |
var builder = new HostBuilder(); | |
builder.UseContentRoot(Directory.GetCurrentDirectory()); | |
builder.ConfigureHostConfiguration(config => | |
{ | |
config.AddEnvironmentVariables(prefix: "DOTNET_"); | |
if (args != null) | |
{ | |
config.AddCommandLine(args); | |
} | |
}); | |
builder.ConfigureAppConfiguration((hostingContext, config) => | |
{ | |
var env = hostingContext.HostingEnvironment; | |
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) | |
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true); | |
if (env.IsDevelopment() && !string.IsNullOrEmpty(env.ApplicationName)) | |
{ | |
var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName)); | |
if (appAssembly != null) | |
{ | |
config.AddUserSecrets(appAssembly, optional: true); | |
} | |
} | |
config.AddEnvironmentVariables(); | |
if (args != null) | |
{ | |
config.AddCommandLine(args); | |
} | |
}) | |
.ConfigureLogging((hostingContext, logging) => | |
{ | |
var isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); | |
// IMPORTANT: This needs to be added *before* configuration is loaded, this lets | |
// the defaults be overridden by the configuration. | |
if (isWindows) | |
{ | |
// Default the EventLogLoggerProvider to warning or above | |
logging.AddFilter<EventLogLoggerProvider>(level => level >= LogLevel.Warning); | |
} | |
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); | |
logging.AddConsole(); | |
logging.AddDebug(); | |
logging.AddEventSourceLogger(); | |
if (isWindows) | |
{ | |
// Add the EventLogLoggerProvider on windows machines | |
logging.AddEventLog(); | |
} | |
}) | |
.UseDefaultServiceProvider((context, options) => | |
{ | |
var isDevelopment = context.HostingEnvironment.IsDevelopment(); | |
options.ValidateScopes = isDevelopment; | |
options.ValidateOnBuild = isDevelopment; | |
}); | |
return builder; | |
} | |
} | |
} |