如何在ASP.NET MVC 6中为不同的环境注册不同的服务?

Rov*_*ver 2 .net c# asp.net dependency-injection asp.net-core-mvc

为不同环境配置服务的正确方法是什么?

例如,我想将FakeService添加到DEV配置的服务集合和发布配置的RealService.

public void ConfigureServices(IServiceCollection services)
{
    /* Need to check environment */
    services.AddSingleton<IService, FakeService>();
    ....
}
Run Code Online (Sandbox Code Playgroud)

Sta*_*ams 5

MVC 6有一个值来定义它是什么环境,这可以由环境变量ASPNET_ENV设置.您可以从IHostingEnvironment获取该值:

public void ConfigureServices(IServiceCollection services)
{
    var env = services.BuildServiceProvider().GetRequiredService<IHostingEnvironment>();
    if (env.IsDevelopment())
        Console.WriteLine("Development");
    else if (env.IsProduction())
        Console.WriteLine("Production");
    else if (env.IsEnvironment("MyCustomEnvironment"))
        Console.WriteLine("MyCustomEnvironment");
}
Run Code Online (Sandbox Code Playgroud)

您可以通过右键单击>属性>调试>环境变量在项目中设置VS2015中的值:

环境变量

以下是有关使用环境变量进行配置的更多信息.