Different types of services in ASP.NET Core

विभिन्न प्रकार की सर्विसेज का उपयोग

ASP.NET Core एप्लीकेशन के भीतर विभिन्न प्रकार के सर्विसेज जैसे कॉन्फ़िगरेशन सर्विस (Configuration Service), लॉगिंग सर्विस (Logging Service), होस्टिंग सर्विस (Hosting Service) और अन्य कई प्रकार के सर्विसेज पहले से ही बने बनाए मिलते हैं। इसका अर्थ है कि उनके ऑब्जेक्ट को हमें बनाने की जरूरत नहीं होती है। इन ऑब्जेक्ट की जरूरत होने पर कंटेनर के द्वारा निर्माण हो जाता है।

दूसरी प्रकार की सर्विसेज के लिए ASP.NET Core एप्लीकेशन के भीतर पैकेज को इंस्टॉल करना होता है। फिर उनसे संबंधित सर्विस को डिपेंडेंसी इंजेक्शन कंटेनर के भीतर एक्सटेंशन मेथड के द्वारा रजिस्टर करना होता है। जब एक बार सर्विस रजिस्टर हो जाता है तब हम उसे किसी भी क्लास के भीतर कंस्ट्रक्टर इंजेक्शन के माध्यम से उपयोग कर सकते हैं। उदाहरण के लिए, मान लीजिए आपको अपने एप्लीकेशन के भीतर सेरिलॉग (Serilog) नामक लॉगिंग पैकेज का उपयोग करना है तो सबसे पहले आप उसको अपने एप्लीकेशन के भीतर Serilog पैकेज इंस्टॉल करेंगे।

dotnet add package Serilog.AspNetCore --version 9.0.0

थर्ड पार्टी लॉगिंग पैकेज को इंस्टॉल करने के बाद आप एक्सटेंशन मेथड का उपयोग करते हुए सेरिलॉग को डिपेंडेंसी इंजेक्शन कंटेनर के भीतर रजिस्टर करेंगे। तत्पश्चात आप सेरिलॉग को अपने एप्लीकेशन के किसी भी क्लास के भीतर कंस्ट्रक्टर इंजेक्शन के माध्यम से इंजेक्ट करके उपयोग कर सकते हैं।

इसी तरह, एक दूसरा उदाहरण लेते हैं, मान लेते हैं आप अपने ASP.NET Core एप्लीकेशन के भीतर मॉडल-व्यू-कंट्रोलर (Model-View-Controller - MVC) आर्किटेक्चर के आधार पर एप्लीकेशन को विकसित करना चाहते हैं तो उसके लिए आपको MVC से संबंधित पैकेज को अपनी एप्लीकेशन में इंस्टॉल करना होगा और एक्सटेंशन मेथड के माध्यम से डिपेंडेंसी इंजेक्शन कंटेनर के भीतर रजिस्टर करना होगा।

dotnet add package Microsoft.AspNetCore.Mvc --version 2.3.0

इसी तरह, एक तीसरा उदाहरण लेते हैं, मान लेते हैं आप अपने ASP.NET Core एप्लीकेशन के भीतर रेज़र पेज (Razor Pages) आर्किटेक्चर के आधार पर एप्लीकेशन को विकसित करना चाहते हैं तो उसके लिए आपको रेज़र पेज से संबंधित पैकेज को अपनी एप्लीकेशन में इंस्टॉल करना होगा और एक्सटेंशन मेथड के माध्यम से डिपेंडेंसी इंजेक्शन कंटेनर के भीतर रजिस्टर करना होगा।

कस्टम डेवलपर सर्विस को रजिस्टर करना

अब हम विचार करेंगे कि कस्टम डेवलपर के द्वारा बनाया गया सर्विस को डिपेंडेंसी इंजेक्शन कंटेनर के भीतर कैसे रजिस्टर करते हैं: यदि डेवलपर के द्वारा बनाया गया क्लास MyService किसी इंटरफेस IMyService को इम्प्लीमेंट कर रहा हो तो ऐसी स्थिति में हम निम्नलिखित प्रकार से सर्विस को रजिस्टर करते हैं:

services.AddScoped<IMyService, MyService>();

लेकिन यदि सर्विस MyService किसी इंटरफेस को इम्प्लीमेंट नहीं कर रहा हो तो इस हालत में हम निम्नलिखित प्रकार से सर्विस को रजिस्टर करते हैं:

services.AddScoped<MyConcreteService>();

एक ही सर्विस का एकाधिक बार रजिस्ट्रेशन

जब एक ही सर्विस को एक से अधिक बार कंटेनर के भीतर रजिस्टर किया जाता है तब क्या होता है? 

यदि सर्विस को एक से अधिक बार कंटेनर के भीतर रजिस्टर किया जाता है तो जो सबसे अंतिम बार रजिस्ट्रेशन किया जाता है वही मान्य होता है। ऐसा जानना इसलिए आवश्यक है क्योंकि यदि एक सर्विस को ट्रांजिएंट (Transient) सर्विस के रूप में या स्कोपड (Scoped) सर्विस के रूप में या सिंगलटन (Singleton) सर्विस के रूप में रजिस्टर किया गया हो, तो जो अंतिम रूप में रजिस्टर किया गया होगा वही मान्य होगा.

टिप्पणियाँ

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

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