Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 在ConfigureServices方法中访问IHostingEnvironment_Asp.net Core - Fatal编程技术网

Asp.net core 在ConfigureServices方法中访问IHostingEnvironment

Asp.net core 在ConfigureServices方法中访问IHostingEnvironment,asp.net-core,Asp.net Core,我需要在ConfigureServicesmethod中检查当前托管环境名称是否为“Development” 因此,使用IHostingEnvironment.IsDevelopment()方法对我来说可能没问题,但与Configure方法不同,我没有IHostingEnvironment env只需在Startup类中创建一个属性来持久化IHostingEnvironment。在已具有访问权限的启动构造函数中设置属性,然后可以从ConfigureServices中访问该属性。归功于 如果您想在

我需要在
ConfigureServices
method中检查当前托管环境名称是否为“Development”


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

只需在Startup类中创建一个属性来持久化IHostingEnvironment。在已具有访问权限的启动构造函数中设置属性,然后可以从ConfigureServices中访问该属性。归功于

如果您想在
ConfigureServices
中访问
IHostingEnvironment
,则必须通过构造函数将其注入,并将其存储在
ConfigureServices
中供以后访问:

公共类启动
{
公共启动(IConfiguration配置,IHostingEnvironment环境)
{
配置=配置;
环境=环境;
}
公共IConfiguration配置{get;}
公共IHostingEnvironment环境{get;}
public void配置服务(IServiceCollection服务)
{
services.AddMvc();
System.Console.WriteLine($“app:{Environment.ApplicationName}”);
}
//其余省略
}

IHostingEnvironment
在Core 3.1中被弃用

        private readonly IWebHostEnvironment _env;
   
        public Startup(IConfiguration configuration, IWebHostEnvironment env)
        {
            _env = env;
            Configuration = configuration;
        }
我应该做这个把戏


然后使用
\u env.IsDevelopment()
等引用任何地方。

如果您没有使用
启动
类并直接调用
.Configure()
,您可以使用
GetService
访问
IHostingEnvironment
IWebHostEnvironment

ASP.NET核心2.2:

.Configure(app => {
    var hostingEnvironment = app.ApplicationServices.GetService<IHostingEnvironment>();
    if (hostingEnvironment?.IsDevelopment() == true)
    {
        app.UseDeveloperExceptionPage();
    }

    // .. Other stuff
});
.Configure(app => {
    var hostingEnvironment = app.ApplicationServices.GetService<IWebHostEnvironment>();
    if (hostingEnvironment?.IsDevelopment() == true)
    {
        app.UseDeveloperExceptionPage();
    }

    // .. Other stuff
});
.Configure(应用=>{
var hostingEnvironment=app.ApplicationServices.GetService();
if(hostingEnvironment?.IsDevelopment()==true)
{
app.UseDeveloperExceptionPage();
}
//…其他东西
});
ASP.NET Core 3.x:

.Configure(app => {
    var hostingEnvironment = app.ApplicationServices.GetService<IHostingEnvironment>();
    if (hostingEnvironment?.IsDevelopment() == true)
    {
        app.UseDeveloperExceptionPage();
    }

    // .. Other stuff
});
.Configure(app => {
    var hostingEnvironment = app.ApplicationServices.GetService<IWebHostEnvironment>();
    if (hostingEnvironment?.IsDevelopment() == true)
    {
        app.UseDeveloperExceptionPage();
    }

    // .. Other stuff
});
.Configure(应用=>{
var hostingEnvironment=app.ApplicationServices.GetService();
if(hostingEnvironment?.IsDevelopment()==true)
{
app.UseDeveloperExceptionPage();
}
//…其他东西
});

如果您没有启动类(您可能正在创建服务),您可以从ConfigureServices中的hostContext获取环境,如下所示:

 public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureServices((hostContext, services) =>
                {
                    IConfiguration config = hostContext.Configuration;
                    Configuration = config;

                    var env = hostContext.HostingEnvironment;
                    EnvironmentName = env?.EnvironmentName;

...

尽管Asp.Net Core 2.0的新项目模板在启动构造函数中没有包含参数“IHostingEnvironment env”,但可以指定该参数并将其正确注入。为什么在
ConfigureServices
中这是不可能的?@Alexandro_xpt记录您关于
ConfigureServices
的问题的答案,这是不可能的,因为框架不支持该特定方法的依赖项注入,就像它在其他领域所做的那样(可能是因为您使用此方法来配置依赖项注入)。Joe描述的构造函数级别的设置应该可以解决这个问题。@MarkG很遗憾,答案被删除了。。。其Q已被标记为该文件的副本。因此,包括此处…从.NET 5开始,IHostingEnvironment已被弃用,您将希望改用IWebHostEnvironment。您好,这没什么大不了的,但在字符串格式中,
environment
是小写,而属性似乎是
environment
@BenSmith。我相信您有输入错误。你在声明中重复了IHostingEnvironment“IHostingEnvironment现在已经过时,应该改用IHostingEnvironment。IHostingEnvironment的正确替代品是什么?Doh!Good spot@Blake。我将删除我以前的评论。我的评论应该是“IHostingEnvironment现在已经过时,应该改用IWebHostEnvironment”。更清楚的是,难道不应该说,
IHostingEnvironment
只是在
.Net Core 3.0
时才过时吗?(我正在进行一个“带回家的测试”,该测试调用
服务.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
配置服务()中)
method和IHostingEnvironment运行良好。@ScottFraley正确。由于此问题和答案来自.NET Core 2.x时间框架(许多项目将在相当长的一段时间内继续使用),因此它仍然适用。