EnvironmentNameをIWebHostEnvironment.EnvironmentNameを使わずに取得してみる
EnvironmentNameをProgram.cs内で参照したい
具体的には、Mainメソッド内で
CreateHostBuilder(args).Build().Run();
ってやってるところで、ロギングしたかったり、CreateHostBuilderのところで、そもそもEnvironmentNameに対応したappsettings.XXX.jsonで、ロギングの設定を切り替えたい欲があります。(ProdではFatalだけでいいですし、開発環境ならDebugログまで全部ほしかったりするので。)
書いてみた
using System; namespace Microsoft.AspNetCore.Hosting { public static class DefaultEnvironmentNames { public const string Development = nameof(Development); public const string DevelopmentRemote = nameof(DevelopmentRemote); public const string Staging = nameof(Staging); public const string Production = nameof(Production); } public static class DefaultEnvironment { public static string GetEnvironmentName() { return Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? DefaultEnvironmentNames.Production; } } }
DefaultEnvironment .GetEnvironmentName() という、環境変数"ASPNETCORE_ENVIRONMENT"を取得し、取得結果がnullであれば、"Production"を返却するだけのきわめてシンプルなメソッド(とそれを実現するためのクラス2つ)を書いてみました。 C#、というか.NETには、古の昔から環境変数を取り扱えるEnvironmentクラス(@System名前空間)が存在しているので、環境変数を取得するコード自体は随分昔から変わらないですね。 蓋を開けてみれば、.NET Framework時代に使っていた名前空間 / Object / Api の利用経験を思い出すことで解決可能でした。
C# / .NETは、バージョンが上がるたびに別物感を感じる瞬間があるんですが、やはり地続きなんだなあと感じました。(小並感)