C# में डिपेंडेंसी इंजेक्शन (Dependency Injection): पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# में डिपेंडेंसी इंजेक्शन क्या है और इसकी आवश्यकता क्यों है



C# और .NET में आधुनिक डेवलपमेंट में प्रमुख डिज़ाइन सिद्धांतों में से एक है Dependency Injection (DI) — डिपेंडेंसी इंजेक्शन। यह पैटर्न ढीले-युग्मित (loosely coupled), परीक्षण योग्य और आसानी से रखरखाव योग्य कोड बनाने की अनुमति देता है। क्लास द्वारा स्वयं आवश्यक ऑब्जेक्ट्स के इंस्टेंस बनाने (कठोर युग्मन) के बजाय, डिपेंडेंसी को बाहर से इंजेक्ट किया जाता है।



DI का मुख्य उद्देश्य Inversion of Control (IoC) सिद्धांत को लागू करना है, जहां ऑब्जेक्ट निर्माण का नियंत्रण बाहरी कंटेनर या फ्रेमवर्क को स्थानांतरित कर दिया जाता है। यह एप्लिकेशन की आर्किटेक्चर को मौलिक रूप से बदल देता है, इसे लचीला और परिवर्तनों के लिए तैयार बनाता है।



कठोर युग्मन (Tight Coupling) की समस्या



DI के बिना एक सामान्य उदाहरण देखें:



public class OrderService{    private readonly EmailSender _emailSender;

public OrderService() { // कठोर डिपेंडेंसी — एक विशिष्ट क्लास का इंस्टेंस बनाते हैं _emailSender = new EmailSender(); }

public void ProcessOrder(Order order) { // ऑर्डर प्रोसेसिंग का लॉजिक _emailSender.Send("ऑर्डर प्रोसेस किया गया"); }}


यहां OrderService सीधे EmailSender पर निर्भर है। यदि हम ईमेल भेजने को SMS या लॉगिंग से बदलना चाहते हैं, तो हमें OrderService का कोड बदलना होगा। यह Open/Closed Principle का उल्लंघन करता है और मॉड्यूलर परीक्षण को लगभग असंभव बना देता है।



C# में डिपेंडेंसी इंजेक्शन के मुख्य तरीके



C# में DI को लागू करने के तीन मुख्य तरीके हैं। प्रत्येक के अपने उपयोग के परिदृश्य और विशेषताएं हैं।



1. कंस्ट्रक्टर के माध्यम से इंजेक्शन (Constructor Injection)



यह .NET में सबसे लोकप्रिय और अनुशंसित तरीका है। डिपेंडेंसी कंस्ट्रक्टर के पैरामीटर के माध्यम से पास की जाती हैं और आमतौर पर केवल-पढ़ने योग्य (readonly) प्राइवेट फील्ड में संग्रहीत की जाती हैं।



public interface INotificationService{    void Send(string message);}

public class EmailService : INotificationService{ public void Send(string message) { Console.WriteLine($"ईमेल भेजा गया: {message}"); }}

public class OrderService{ private readonly INotificationService _notificationService;

// डिपेंडेंसी कंस्ट्रक्टर के माध्यम से इंजेक्ट की जाती है public OrderService(INotificationService notificationService) { _notificationService = notificationService; }

public void ProcessOrder(Order order) { // लॉजिक... _notificationService.Send("ऑर्डर प्रोसेस किया गया"); }}


लाभ: स्पष्ट रूप से दिखता है कि क्लास को किन डिपेंडेंसी की आवश्यकता है; ऑब्जेक्ट बनने के बाद डिपेंडेंसी अपरिवर्तनीय होती हैं; मॉक-ऑब्जेक्ट्स डालकर परीक्षण करना आसान है।



2. प्रॉपर्टी के माध्यम से इंजेक्शन (Property Injection)



डिपेंडेंसी एक पब्लिक प्रॉपर्टी (सेटर) के माध्यम से सेट की जाती है। इसका उपयोग कम किया जाता है, जब डिपेंडेंसी क्लास के काम करने के लिए अनिवार्य नहीं होती।



public class OrderService{    public INotificationService NotificationService { get; set; }

public OrderService() { }

public void ProcessOrder(Order order) { if (NotificationService != null) { NotificationService.Send("ऑर्डर प्रोसेस किया गया"); } }}


नुकसान: डिपेंडेंसी सेट करना भूल सकते हैं, जिससे रनटाइम पर NullReferenceException हो सकता है। केवल वैकल्पिक डिपेंडेंसी के लिए उपयोग करने की सलाह दी जाती है।



3. मेथड के माध्यम से इंजेक्शन (Method Injection)



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



public class OrderService{    public void ProcessOrder(Order order, INotificationService notificationService)    {        // लॉजिक...        notificat                

ब्लॉग

पुस्तक अनुशंसाएँ