ConfigureServices 메서드에서 IHostingEnvironment 액세스


102

ConfigureServices현재 호스팅 환경 이름이 '개발'인지 확인해야합니다 .

그래서 IHostingEnvironment.IsDevelopment()방법을 사용 하는 것은 나에게 괜찮을 수 있지만 Configure 방법과 달리 IHostingEnvironment env.

답변:


129

IHostingEnvironment를 유지하려면 Startup 클래스에 속성을 만듭니다. 이미 액세스 권한이있는 Startup 생성자에서 속성을 설정 한 다음 ConfigureServices에서 속성에 액세스 할 수 있습니다.


36
Asp.Net Core 2.0의 새 프로젝트 템플릿에는 Startup 생성자에 "IHostingEnvironment env"매개 변수가 포함되어 있지 않지만이를 지정할 수 있으며 올바르게 삽입됩니다.
Augusto Barreto

3
ConfigureServices불가능합니까?
Alexsandro

2
@Alexsandro_xpt에 대한 질문에 대한 답변을 문서화 ConfigureServices하기 위해 프레임 워크가 해당 특정 메서드에 대한 종속성 주입을 다른 영역에서 수행하는 방식으로 지원하지 않기 때문에 불가능합니다 (이 메서드를 사용하여 종속성 주입을 구성하기 때문일 수 있음). Joe가 설명한대로 생성자 수준에서 설정하면 문제가 해결됩니다.
Matt Eland

@MarkG 불행히도 그 대답은 삭제되었습니다 ... 그 Q는 이것의 중복으로 표시되었습니다. 그래서 ... 여기에 포함
리처드

27

이 질문 과 중복 된 것으로 표시된 질문에서 여기로 복사 하여 삭제했습니다 . 배우대한 크레딧 .

액세스하려는 경우 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의 올바른 대체는 무엇입니까?
Blake

도! 좋은 자리 @Blake. 이전 댓글을 삭제하겠습니다. 내 의견은 "IHostingEnvironment가 이제 사용되지 않습니다. 대신 IWebHostEnvironment를 사용해야합니다."라는 내용이어야합니다.
Ben Smith

그리고 더 명확하게 말하면, 그것은 IHostingEnvironment단지 구식 이라고 말해야하지 .Net Core 3.0않습니까? (I는 '테이크 홈 시험'이 통화 중이 야 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);내부 ConfigureServices(). 방법 IHostingEnvironment이 잘 작동됩니다
스콧 Fraley

@ScottFraley 맞습니다. 이 질문과 대답은 .NET Core 2.x 시간 프레임 (많은 프로젝트에서 꽤 오랫동안 계속 사용)에서 비롯되었으므로 여전히 적용됩니다.
Richard

1

IHostingEnvironment Core 3.1에서 더 이상 사용되지 않습니다.

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

트릭을해야합니다 ...

그런 다음 어디에서나 참조하십시오 _env.IsDevelopment().

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.