佳佳的博客
Menu
首页
《.NET Core 实战》 [No.333~334] 启动环境
Posted by
佳佳
on 2020-04-10
IT
C#
.NET Core
《.NET Core 实战》
读书笔记
<!-- # 《.NET Core 实战》 [No.333~334] 启动环境 --> <!-- dotnet-core-web-app-enviroment --> 在[之前的博客][1]中提到过 *Environment* 环境变量有 3 个预定义的值,分别表示了常用的 3 种启动环境。 - *Development*:开发环境 - *Staging*:预览环境 - *Production*:生产环境 但这些仅是参考值,开发人员可以根据自己的需要自定义该环境变量的值。 在[这篇博客][2]有讲到开发时怎么使用自定义的 *Environment* 环境变量值配置多个运行环境。 *.NET Core* 项目发布后是不带 *launchSettings.json* 运行设置文件的(默认为 *Production* 启动环境),此时若要指定启动环境可以使用 `IWebHostBuilder` 接口的 *UseEnvironment* 扩展方法。 ```csharp public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseEnvironment("Preview") .UseStartup<Startup>(); ``` `Startup` 类中的 *Configure* 方法支持依赖注入,可以添加 `IHostingEnvironment` 类型的参数接收注入。 *Microsoft.AspNetCore.Hosting.HostingEnvironmentExtensions* 扩展类中提供了 `IHostingEnvironment` 类的几个扩展方法: - *IsDevelopment* - *IsStaging* - *IsProduction* - *IsEnvironment* 其中 *IsEnvironment* 方法用于判断是否是指定的自定义环境。 当然也可以通过 `IHostingEnvironment` 类的 *EnvironmentName* 属性来判断启动环境。 ```csharp // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.Run(async (context) => { await context.Response.WriteAsync("Development environment."); }); } else if (env.IsEnvironment("Preview")) { app.Run(async (context) => { await context.Response.WriteAsync("Preview environment."); }); } } ``` 不过上述方案会导致各种环境的代码纠缠在一起,最好是利用 *Startup* 类支持匹配启动环境的特性来将其解耦。 匹配方案有两种: 1. *Startup* 类名与环境匹配 如,用于开发环境的 *Startup* 类可以命名为 *StartupDevelopment* 类。 **书上是提到了这个方案,不过我没有运行成功。不确定是不是版本的问题(开发环境为 *VS2017* + *.NET Core 2.1*)。** 2. *Configure* 约定方法名与环境匹配 如,用于开发环境的 *Configure* 方法可以命名为 *ConfigureDevelopment*(此时仅不会再调用默认的 *Configure* 方法)。 ```csharp public void ConfigureDevelopment(IApplicationBuilder app, IHostingEnvironment env) { app.Run(async (context) => { await context.Response.WriteAsync("Development Environment."); }); } ``` <!-- 链接 --> [1]: /2020/4/7/dotnet-core-web-host-config (《.NET Core 实战》 [No.326~329] Web 主机配置) [2]: /2018/10/19/net-core-配置多个环境设置 (.NET Core 配置多个环境设置) --- > 购买本书 => [《.NET Core实战:手把手教你掌握380个精彩案例》][10] -- *周家安* 著 --- [10]:https://union-click.jd.com/jdc?e=&p=AyIGZRhaEwAQBFUZXBIyEgRSEl0QCxc3EUQDS10iXhBeGlcJDBkNXg9JHU4YDk5ER1xOGRNLGEEcVV8BXURFUFdfC0RVU1JRUy1OVxUBFQ5THlIQMm1AEkRdb11GZyNTK0BBZwYIbylWcHILWStaJQITBlYbXB0LFQJlK1sSMkBpja3tzaejG4Gx1MCKhTdUK1sRCxQBVxtTEQIQBlwrXBULIloNXwZBXUReEStrJQEiN2UbaxYyUGlUG1kUBhcGUBILQgUXDlMeUkBVRlUBS10XBkIABhkJRzIQBlQfUg%3D%3D (《.NET Core实战:手把手教你掌握380个精彩案例》)
版权声明:原创文章,未经允许不得转载。
https://www.liujiajia.me/2020/4/10/dotnet-core-web-app-enviroment
“Buy me a nongfu spring”
« 《.NET Core 实战》 [No.335~346] 依赖注入与中间件
《.NET Core 实战》 [No.330~332] Startup »
昵称
*
电子邮箱
*
回复内容
*
(回复审核后才会显示)
提交
目录
AUTHOR
刘佳佳
江苏 - 苏州
软件工程师