在ConfigureServices方法中访问IHostingEnvironment


100

我需要检查ConfigureServices方法,当前的托管环境名称是否为“开发”。

因此,使用IHostingEnvironment.IsDevelopment()方法对我来说可能还可以,但是与Configure方法不同,我没有IHostingEnvironment env

Answers:


128

只需在Startup类中创建一个属性即可保留IHostingEnvironment。在您已经可以访问的Startup构造函数中设置属性,然后可以从ConfigureServices访问该属性


34
即使Asp.Net Core 2.0的新项目模板在启动构造函数中不包含参数“ IHostingEnvironment env”,也可以指定它并将其正确注入。
奥古斯托·巴雷托

3
为什么在ConfigureServices其中不可能?
Alexsandro

2
@Alexsandro_xpt记录了您的问题的答案ConfigureServices,这是不可能的,因为该框架不像其他领域那样支持该特定方法的依赖注入(可能是因为您使用此方法配置依赖注入)。如Joe所述,在构造函数级别进行设置应该可以解决此问题。
马特·伊兰

@MarkG不幸的是,答案已被删除...其Q被标记为与此答案的重复。所以这里包括...
理查德

26

从此处复制的问题标记为与此重复,并已删除。感谢A-构造函数

如果要访问IHostingEnvironmentConfigureServices则必须通过构造函数将其注入并存储以供以后访问ConfigureServices

public class Startup
{
    public Startup(IConfiguration configuration, IHostingEnvironment environment)
    {
        Configuration = configuration;
        Environment = environment;
    }

    public IConfiguration Configuration { get; }

    public IHostingEnvironment Environment { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        System.Console.WriteLine($"app: {Environment.ApplicationName}");
    }

    // rest omitted
}

嗨,这没什么大不了,但是在字符串格式中,environment小写是小写的,而属性似乎是Environment
timmi4sa

1
@BenSmith我相信您有错字。您在语句“ IHostingEnvironment现在已过时,应改用IHostingEnvironment。”中重复了IHostingEnvironment。IHostingEnvironment的正确替代品是什么?
Blake

h!布莱克的好地方。我将删除以前的评论。我的评论应该读为“ IHostingEnvironment现在已过时,应改为使用IWebHostEnvironment”。
本·史密斯,

更明确地说,难道不是应该说过时IHostingEnvironment.Net Core 3.0吗?(我工作的一个“带回家的测试”的呼叫services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);里面的ConfigureServices()方法和IHostingEnvironment工作正常。
斯科特Fraley说

@ScottFraley正确。由于此问题和答案来自.NET Core 2.x时间范围(很多项目将在相当长的一段时间内继续使用它),因此它仍然适用。
理查德

0

IHostingEnvironment 在Core 3.1中已弃用

        private readonly IWebHostEnvironment _env;
   
        public Startup(IConfiguration configuration, IWebHostEnvironment env)
        {
            _env = env;
            Configuration = configuration;
        }

应该做到这一点...

然后在任何地方引用_env.IsDevelopment()等等...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.