जब "ASPNETCORE_ENVIRONMENT": "विकास"
मैं इस तरह सेवा को हल करने की कोशिश कर रहा हूं IApplicationBuilder.ApplicationServices.GetServices<AdminPanelDbContext>();और "ASPNETCORE_ENVIRONMENT": "Development"विकास के लिए तैयार हूं ।
अपवाद:
रूट प्रदाता से scoped सेवा 'AdminPanel.DAL.DbContexts.AdminPanel.AdminPanelDbContext' हल नहीं कर सकता।
लेकिन जब मैं सेट "ASPNETCORE_ENVIRONMENT": "Production"सब कुछ ठीक काम करता है।
मैंने नीचे देखा appsettnings.Development.jsonऔर इससे अलग कुछ भी नहीं है appsettings.json। क्या कोई अन्य सेटिंग है जो इसे प्रभावित कर रही है?
जवाब
ASP.NET कोर में निर्भरता इंजेक्शन देखें - स्कोप सत्यापन :
जब एप्लिकेशन डेवलपमेंट वातावरण में चलता है और
CreateDefaultBuilderहोस्ट बनाने के लिए कॉल करता है, तो डिफ़ॉल्ट सेवा प्रदाता यह सत्यापित करने के लिए चेक करता है:
- स्कोप वाली सेवाओं को रूट सेवा प्रदाता से हल नहीं किया जाता है।
- स्कोप्ड सेवाओं को एकल में इंजेक्ट नहीं किया जाता है।
[...]
बंद सेवाओं को कंटेनर द्वारा निपटाया जाता है जिसने उन्हें बनाया है। यदि रूट कंटेनर में एक स्कोप की गई सेवा बनाई जाती है, तो सेवा का जीवनकाल प्रभावी रूप से सिंगलटन को बढ़ावा दिया जाता है क्योंकि यह केवल ऐप को बंद करने पर रूट कंटेनर द्वारा निपटाया जाता है। सेवा स्कोप को मान्य करने पर इन स्थितियों को पकड़ा
BuildServiceProviderजाता है।अधिक जानकारी के लिए, स्कोप सत्यापन देखें ।
यह सुविधा ASP.NET Core v3 में नई है। ASP.NET Core के पिछले संस्करणों में इस सुविधा का अभाव था।
मेरे लिए, इस विशेषता का नकारात्मक पक्ष यह है कि उत्पादन में चलने पर यह वास्तव में डिफ़ॉल्ट रूप से अक्षम होता है। यह सभी वातावरण में डिफ़ॉल्ट रूप से होना चाहिए था।