How to get the Development/Staging/production Hosting Environment in ConfigureServices

前端 未结 12 1854
时光取名叫无心
时光取名叫无心 2020-12-04 15:51

How do I get the Development/Staging/production Hosting Environment in the ConfigureServices method in Startup?

public void ConfigureServices(IS         


        
12条回答
  •  既然无缘
    2020-12-04 16:27

    In Dotnet Core 2.0 the Startup-constructor only expects a IConfiguration-parameter.

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    

    How to read hosting environment there? I store it in Program-class during ConfigureAppConfiguration (use full BuildWebHost instead of WebHost.CreateDefaultBuilder):

    public class Program
    {
        public static IHostingEnvironment HostingEnvironment { get; set; }
    
        public static void Main(string[] args)
        {
            // Build web host
            var host = BuildWebHost(args);
    
            host.Run();
        }
    
        public static IWebHost BuildWebHost(string[] args)
        {
            return new WebHostBuilder()
                .UseConfiguration(new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("hosting.json", optional: true)
                    .Build()
                )
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    var env = hostingContext.HostingEnvironment;
    
                    // Assigning the environment for use in ConfigureServices
                    HostingEnvironment = env; // <---
    
                    config
                      .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
    
                    if (env.IsDevelopment())
                    {
                        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, builder) =>
                {
                    builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                    builder.AddConsole();
                    builder.AddDebug();
                })
                .UseIISIntegration()
                .UseDefaultServiceProvider((context, options) =>
                {
                    options.ValidateScopes = context.HostingEnvironment.IsDevelopment();
                })
                .UseStartup()
                .Build();
        }
    

    Ant then reads it in ConfigureServices like this:

    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        var isDevelopment = Program.HostingEnvironment.IsDevelopment();
    }
    

提交回复
热议问题