Service Registration with Lifetime in an ASP.NET Core Application

इस पोस्ट में ASP.NET Core एप्लीकेशन के अंतर्गत सर्विस रजिस्ट्रेशन की प्रक्रिया को समझेंगे।  

ASP.NET Core एप्लीकेशन में सर्विस रजिस्ट्रेशन (Service Registration) एक मूलभूत अवधारणा है, जो डिपेंडेंसी इंजेक्शन (Dependency Injection - DI) पैटर्न का दिल है। यह एप्लीकेशन के विभिन्न घटकों (कंपोनेंट्स) को एक-दूसरे पर कम निर्भर (loosely coupled) रखने और कोड को अधिक मॉड्यूलर, टेस्टेबल और मैनेजेबल बनाने में मदद करता है। 

सर्विस रजिस्ट्रेशन की प्रक्रिया सर्विस रजिस्ट्रेशन का मतलब है कि आप ASP.NET Core के डिपेंडेंसी इंजेक्शन (DI) कंटेनर को बताते हैं कि जब किसी विशिष्ट इंटरफ़ेस या क्लास की आवश्यकता हो, तो उसे कौन सी कंक्रीट इम्प्लीमेंटेशन प्रदान करनी है। यह आमतौर पर एप्लीकेशन के स्टार्टअप के दौरान किया जाता है, .NET 6+ में Program.cs फाइल में। 

प्रक्रिया को समझने के लिए इन चरणों को देखें: 

सर्विसेज की पहचान: सबसे पहले, आप उन कंपोनेंट्स की पहचान करते हैं जिन्हें DI के माध्यम से इंजेक्ट करने की आवश्यकता होगी। ये अक्सर इंटरफेस और उनकी कंक्रीट क्लास इम्प्लीमेंटेशन होती हैं। 

उदाहरण: आपके पास एक इंटरफ़ेस IMyService हो सकता है और इसकी इम्प्लीमेंटेशन MyServiceImplementation। 

DI कंटेनर में रजिस्ट्रेशन: आप WebApplicationBuilder.Services प्रॉपर्टी (जो IServiceCollection प्रकार की होती है) का उपयोग करके इन इंटरफेस और इम्प्लीमेंटेशन को DI कंटेनर में रजिस्टर करते हैं। 

रजिस्ट्रेशन के दौरान, आपको सर्विस के लाइफटाइम (Lifetime) को भी परिभाषित करना होता है। 

ASP.NET Core तीन मुख्य सर्विस के लाइफटाइम विकल्प प्रदान करता है: 

  1. AddSingleton<TService, TImplementation>()
  2.  AddScoped<TService, TImplementation>()
  3. AddTransient<TService, TImplementation>()

1. AddSingleton<TService, TImplementation>()

  • जब पहली बार रिक्वेस्ट की जाती है तो सर्विस का केवल एक इंस्टेंस बनाया जाता है, और फिर वह इंस्टेंस एप्लीकेशन के पूरे लाइफटाइम के लिए पुन: उपयोग किया जाता है। 
  • इसका उपयोग लॉगिंग सर्विसेज़, कॉन्फ़िगरेशन सर्विसेज़ या अन्य ऐसी सर्विसेज़ के लिए किया जाता है जिनमें स्टेट नहीं होता या जो पूरे एप्लीकेशन में साझा की जाती हैं। 

 2. AddScoped<TService, TImplementation>()

  • प्रत्येक HTTP रिक्वेस्ट के दायरे (scope) में सर्विस का एक नया इंस्टेंस बनाया जाता है। इसका मतलब है कि एक ही HTTP रिक्वेस्ट के दौरान जितनी बार भी सर्विस की आवश्यकता होगी, उसी इंस्टेंस का उपयोग किया जाएगा। 
  • जब रिक्वेस्ट समाप्त होती है, तो इंस्टेंस को डिस्पोज कर दिया जाता है। 
  • इसका उपयोग डेटाबेस कॉन्टेक्स्ट या ऑपरेशन-स्पेसिफिक सर्विसेज़ के लिए किया जाता है जहाँ आपको यह सुनिश्चित करना होता है कि रिक्वेस्ट के भीतर सभी संबंधित ऑपरेशंस एक ही इंस्टेंस पर हों।

3. AddTransient<TService, TImplementation>()

  • जब भी सर्विस का अनुरोध किया जाता है तो सर्विस का एक नया इंस्टेंस बनाया जाता है। 
  • यह सबसे हल्का लाइफटाइम है और इसका उपयोग लाइटवेट, स्टेटलेस सर्विसेज़ के लिए किया जाता है जिन्हें हर बार उपयोग करने पर एक नए इंस्टेंस की आवश्यकता होती है।

सर्विस का रिजॉल्व होना (Resolution)

जब ASP.NET Core को किसी कंट्रोलर, मिडलवेयर, या किसी अन्य सर्विस के कंस्ट्रक्टर में किसी रजिस्टर्ड सर्विस की आवश्यकता होती है, तो DI कंटेनर स्वचालित रूप से उस सर्विस का एक इंस्टेंस बनाता है (या एक मौजूदा इंस्टेंस प्रदान करता है, लाइफटाइम के आधार पर) और उसे इंजेक्ट करता है। आपको मैन्युअल रूप से new कीवर्ड का उपयोग करके इंस्टेंस बनाने की आवश्यकता नहीं होती।

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks