我想支持的不仅仅是Microsoft.AspNetCore.Hosting.EnvironmentName
中定义的内置“开发”,“暂存”和“生产”环境。我意识到在程序初始化期间设置环境时我可以自由地创建我想要的任何名称,但这不是问题。 Microsoft.AspNetCore.Hosting.HostingEnvironmentExtensions
中定义了3种扩展方法,似乎无处不在:IsDevelopment()
,IsStaging()
和IsProduction()
。
如何自定义IsDevelopment()
的行为,以便多个自定义环境名称都返回true?
例如,我想区分本地开发和远程开发; 2个环境有自己的配置设置,但都被认为是“开发”。另一个例子可能是多个“暂存”环境;一个用于内部测试,一个用于外部/客户端测试,但两者都被认为是“暂存”。
我不相信我可以编写自己的IsDevelopment()扩展方法并安全地确保我的方法总是优于微软(Closer is better)。例如。我的项目中的代码可能会使用我的,但是当Mvc中的代码调用它时呢?
答案 0 :(得分:1)
由于3 IsDevelopment()
,IsStaging()
和IsProduction()
扩展方法的存在和用法,目前无法做到这一点。< / p>
我基本上最终做的是定义我自己的自定义环境,并提供从Asp.Net Core中定义的每个返回到3的映射。
在Main()中,我创建了一个专门配置类的实例;它计算了代码运行的自定义环境。然后,当我调用WebHostBuilder.UseEnvironment()时,我使用该类中的一个属性来指示与我的自定义对应的Asp.Net Core环境。最后,我将我的类(单例)注入DI容器中,以便可以根据需要使用它。