繁体   English   中英

在 Program.cs 中使用 IWebHostEnvironment web host builder in ASP.NET Core 3.1

[英]Use IWebHostEnvironment in Program.cs web host builder in ASP.NET Core 3.1

我有一个 ASP.NET Core 3.1 应用程序,我需要访问Program.cs IWebHostEnvironment主机构建器中的 IWebHostEnvironment。 这就是我现在拥有的( Program.cs ):

public class Program {

    public static void Main(string[] args) {
        CreateWebHostBuilder(args).Build().Run();
    }

    private static bool IsDevelopment => 
        Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development";

    public static string HostPort => 
        IsDevelopment 
            ? "5000" 
            : Environment.GetEnvironmentVariable("PORT");

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseUrls($"http://+:{HostPort}")
            .UseSerilog((context, config) => {
                config.ReadFrom.Configuration(context.Configuration);
            })
            .UseStartup<Startup>();
}

我不想按照我的方式进行IsDevelopment检查,而是想使用 IWebHostEnvironment 中的IWebHostEnvironment IsDevelopment()方法,但不完全确定该怎么做。 我现在拥有的东西有效,但老实说它并不“感觉正确”。

在 .NET 6 你可以使用新的最小主机 model

在您的主程序中,您可以创建一个应用程序构建器和一个应用程序。 Environment (作为IWebHostEnvironment )在两个对象上都可用。

例如在Program.cs中:

var builder = WebApplication.CreateBuilder(args);
var environment = builder.Environment;

或者:

var app = builder.Build();
var environment = app.Environment;

您可能希望像这样将环境传递给 ConfigureServices:

var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services, builder.Environment);

(PS:我认为此代码不依赖于使用最小托管 model,但这使它更简单。我认为环境属性也可以返回到 .NET 3.1,这是原始问题。)

如果您想使用IWebHostingEnvironment您应该从ConfigureAppConfiguration上下文参数中获取它

 public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((context, builder) =>
                {
                    var isDev = context.HostingEnvironment.IsDevelopment();
                    var isProd = context.HostingEnvironment.IsProduction();
                    var envName = context.HostingEnvironment.EnvironmentName;
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM