ConfigureServicesメソッドでIHostingEnvironmentにアクセスする


100

ConfigureServices現在のホスティング環境名が「開発」であるかどうかをメソッドで確認する必要があります。

したがって、IHostingEnvironment.IsDevelopment()メソッドの使用は私にとっては問題ないかもしれませんが、Configureメソッドとは異なり、私は持っていませんIHostingEnvironment env

回答:


128

Startupクラスにプロパティを作成して、IHostingEnvironmentを永続化するだけです。既にアクセスできるスタートアップコンストラクターでプロパティを設定すると、ConfigureServicesからプロパティにアクセスできます


34
Asp.Net Core 2.0の新しいプロジェクトテンプレートには、スタートアップコンストラクターにパラメーター "IHostingEnvironment env"が含まれていませんが、指定でき、適切に挿入されます。
アウグストバレット2017

3
なぜConfigureServicesそれは不可能ですか?
Alexsandro 2018年

2
@Alexsandro_xptを使用して質問への回答を文書化します。ConfigureServicesフレームワークがその特定のメソッドの依存性注入を他の領域で行う方法でサポートしていないため(おそらく、このメソッドを使用して依存性注入を構成しているため)、不可能です。Joeが説明したようにコンストラクターレベルで設定すると、この問題を回避できます。
マットエランド

@MarkG残念ながらその回答は削除されています...そのQはこの質問の複製としてマークされています。だからここに含めて...
リチャード

26

この質問の重複としてマークされた質問からここにコピーされ、削除されましたa-ctorクレジット。

にアクセスIHostingEnvironmentしたい場合はConfigureServices、コンストラクタを介して挿入し、後でアクセスできるように保存する必要があります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

どー!良いスポット@ブレイク。以前のコメントを削除します。私のコメントは「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()etcでどこでも参照します...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.