“Microsoft.Extensions.DependencyInjection”
List of "environments"
Production
Uat
Qa
DevShared
LocalDev
对于DotNet(Framework/Classic)4.6或更高版本(又名“过去”,我在xml配置中使用了“Unity”。
https://blogs.msdn.microsoft.com/miah/2009/04/03/testing-your-unity-xml-configuration/
(过去在使用“Unity”IoC/DI时使用的是.Net内核之前)。。。当我需要一种特定于环境的混凝土时,我会调整地面上的混凝土。xml。
例如,假设我的webApi需要在生产、uat、qa和dev共享中进行身份验证。但是在dev local中,我不想一直处理身份验证,因为我开发了webApi,我有两个具体的例子。
IAuthorizer
MyRealAuthorizer : IAuthorizer
MyDevLetEverythingThroughAuthorizer : IAuthorizer
我会“注册”其中一个。。使用xml。
我的构建过程会改变团结。xml(确切地说是unity.config)和change out(通过msbuild中的xml更新任务)
我的开发者通过授权人
到
我的授权人
.
.....
Java Spring具有基于“注释”的功能:
import org.springframework.context.annotation.Profile;
@Profile("localdev")
public class MyDevLetEverythingThroughAuthorizer implements IAuthorizer {
@Profile("!localdev")
public class MyRealAuthorizer implements IAuthorizer {
但这并不符合“复合根”模式:(马克·西曼)
http://blog.ploeh.dk/2011/07/28/CompositionRoot/
)
.......
现在我进入了DotNetCore的世界。一切都很顺利。但我最终遇到了一个情况,我需要一个开发友好的混凝土,而不是一个非开发“真正”的混凝土。
在这种情况下,我不确定DotNetCore的最佳实践。
我更愿意尊重复合根模式。
基本上,下面。。。。。。但是尊重环境。
asp。净的
public void ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
/* need this for "local-dev" */
services.AddScoped<IAuthorizer, MyDevLetEverythingThroughAuthorizer>();
/* need this for everything EXCEPT "local-dev" */
services.AddScoped<IAuthorizer, MyRealAuthorizer>();
}
(不是asp.net)点。净核心也一样
private static System.IServiceProvider BuildDi()
{
//setup our DI
IServiceProvider serviceProvider = new ServiceCollection()
.AddLogging()
/* need this for "local-dev" */
.AddSingleton<IAuthorizer, MyDevLetEverythingThroughAuthorizer>()
/* need this for everything EXCEPT "local-dev" */
.AddSingleton<IAuthorizer, MyRealAuthorizer>()
追加
本文和snipplet帮助我更好地理解“内置内容”部分:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-2.2
环境ASP。NET核心读取环境变量
ASPNETCORE_环境,并将价值存储在
我喜欢这里的环境。环境名称。你可以设定
ASPNETCORE_环境支持任何值,但
框架:开发、分期和生产。如果
未设置ASPNETCORE_环境,默认为生产环境。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
}
这个
环境。iEnvironment(“Staging_2”)(类似于env.iEnvironment(“MyCustomValue”))是我猜的诀窍。
附加:
这个问题让Asp更清楚了。净核心。
How to set aspnetcore_environment in publish file?
以及在不实际设置(机器)环境变量的情况下设置环境变量的方法!