【问题标题】:How to get environment variables from inside Main() in ASP.NET Core?如何从 ASP.NET Core 的 Main() 中获取环境变量?
【发布时间】:2020-06-26 18:56:18
【问题描述】:

我想知道代码是否是 Dev/Stage,所以我需要得到它。我尝试了下面的代码,但它似乎跳过了运行 Startup.cs 的 Configure()。帮忙?

 public static void Main(string[] args)
        {
            IHost host = CreateHostBuilder(args).Build();

            SeedDatabase(host);

            host.Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args)
        {


            //return Host.CreateDefaultBuilder(args)
            //  .ConfigureWebHostDefaults(webBuilder =>
            //  {
            //      webBuilder.UseStartup<Startup>();
            //  });




            return Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();

                    webBuilder.ConfigureServices(services => { })
                    .Configure(app =>
                    {
                        Env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
                    });
                });
        }

【问题讨论】:

标签: c# asp.net-core dependency-injection


【解决方案1】:

您还没有完全解释您要获取的内容(环境变量或环境对象)。但根据问题中的一些代码,您似乎想访问IWebHostEnvironment

这很容易。 IHost 有一个 Services 属性。您只需要请求相应的服务即可。

IHost host = CreateHostBuilder(args).Build();
IWebHostEnvironment env = host.Services.GetRequiredService<IWebHostEnvironment>();
// now do something with env
SeedDatabase(host);
host.Run();

现在,如果您首先需要环境,您还可以从different overloadConfigureServices 内部的WebHostBuilderContext 访问环境:

webBuilder.ConfigureServices((ctx, services) => { 
   IWebHostEnvironment env = ctx.HostingEnvironment;
   // Do something with env
});

同样,IHostBuilder(通用主机)上的ConfigureAppConfigurationConfigureHostConfigurationConfigureServices 也提供对IHostEnvironment 的访问(注意缺少“Web”):

return Host.CreateDefaultBuilder(args)
   .ConfigureAppConfiguration((ctx, config) => {
      IHostEnvironment env = ctx.HostingEnvironment;
   })
   .ConfigureServices((ctx, services) => {
      IHostEnvironment env = ctx.HostingEnvironment;
   })
   .ConfigureWebHostDefaults(/* etc */ );

通用主机和网络主机使用相同的服务集合、环境等(除了添加的IWebHostEnvironment

旁注:通常在第一次调用您的应用程序之前不会调用 Startup.cs。这可能就是它似乎没有运行的原因。

【讨论】:

    【解决方案2】:

    尝试从您的 main 方法中获取它,如下所示:

    static void Main(string[] args)
    {
      var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 2021-09-30
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多