कॉन्फ़िगर्सशिप विधि में IHostingEnvironment पर पहुँचना


100

मुझे ConfigureServicesइस पद्धति में जाँच करने की आवश्यकता है कि क्या वर्तमान होस्टिंग परिवेश का नाम 'विकास' है।

तो IHostingEnvironment.IsDevelopment()विधि का उपयोग करना मेरे लिए ठीक हो सकता है, लेकिन कॉन्फ़िगर विधि के विपरीत, मेरे पास नहीं है IHostingEnvironment env

जवाबों:


128

IHostingEnvironment को बनाए रखने के लिए बस स्टार्टअप क्लास में एक संपत्ति बनाएं। प्रॉपर्टी को स्टार्टअप कंस्ट्रक्टर में सेट करें, जहां आपके पास पहले से एक्सेस है, तो आप कन्फिगर सर्विसेज से प्रॉपर्टी को एक्सेस कर सकते हैं


34
भले ही Asp.Net Core 2.0 के लिए नए प्रोजेक्ट टेम्प्लेट में स्टार्टअप कंस्ट्रक्टर में पैरामीटर "IHostingEnvironment env" शामिल नहीं है, इसे निर्दिष्ट किया जा सकता है और इसे ठीक से इंजेक्ट किया जाएगा।
अगस्तो बैरेटो

3
ConfigureServicesइसमें असंभव क्यों है?
Alexsandro

2
@Alexsandro_xpt आपके प्रश्न के उत्तर पर दस्तावेज़ करने के लिए ConfigureServices, यह असंभव है क्योंकि फ्रेमवर्क उस विशेष पद्धति के लिए निर्भरता इंजेक्शन का समर्थन नहीं करता है जिस तरह से अन्य क्षेत्रों में करता है (शायद इसलिए कि आप इस विधि का उपयोग निर्भरता इंजेक्शन को कॉन्फ़िगर करने के लिए करते हैं)। निर्माता के स्तर पर सेटिंग के रूप में जो वर्णित समस्या के आसपास काम करना चाहिए।
मैट एलैंड

@MarkG दुर्भाग्य से वह उत्तर हटा दिया गया है ... इसके Q को इस एक के डुप्लिकेट के रूप में चिह्नित किया गया है। तो यहाँ शामिल हैं ...
रिचर्ड

26

इस एक के डुप्लिकेट के रूप में चिह्नित प्रश्न से हटा दिया गया और हटा दिया गयाएक 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 ठीक काम कर रहा है।
स्कॉट

@ScottFraley सही है। जैसा कि यह प्रश्न और उत्तर .NET कोर 2.x समय-सीमा (जो कि कई परियोजनाएं काफी समय तक उपयोग करना जारी रखेंगी) से आता है। यह अभी भी लागू होता है।
रिचर्ड

1

IHostingEnvironment कोर 3.1 में पदावनत किया गया है

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

करना चाहिए ट्रिक ...

फिर संदर्भ _env.IsDevelopment()आदि के साथ कहीं भी ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.