C# में Dependency Injection: शुरुआती के लिए आसान गाइड

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

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

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

C# में Dependency Injection (DI) क्या है और इसकी आवश्यकता क्यों है?

\n\n

Dependency Injection (डिपेंडेंसी इंजेक्शन) एक डिज़ाइन पैटर्न है जो कोड को अधिक लचीला, टेस्ट करने योग्य और मेंटेन करने में आसान बनाता है। क्लास खुद उन ऑब्जेक्ट्स को बनाने के बजाय जिन पर वह निर्भर है, ये ऑब्जेक्ट्स बाहर से "इंजेक्ट" किए जाते हैं। यह C# और .NET में आधुनिक डेवलपमेंट के मुख्य सिद्धांतों में से एक है।

\n\n

मान लीजिए आप ईमेल नोटिफिकेशन भेजने के लिए एक ऐप बना रहे हैं। यदि आपकी NotificationService क्लास सीधे SmtpClient का इंस्टेंस बनाती है, तो मेल सर्वर बदलने या दूसरे तरीके (जैसे API) से भेजने पर आपको कोड फिर से लिखना पड़ेगा। DI इस समस्या को हल करता है।

\n\n

Dependency Injection के बिना समस्या

\n\n

आइए खराब कोड का एक सामान्य उदाहरण देखें, जहां डिपेंडेंसी क्लास के अंदर ही बनाई गई है:

\n\n
public class EmailService\n{\n    private SmtpClient _smtpClient;\n\n    public EmailService()\n    {\n        // एक विशिष्ट इम्प्लीमेंटेशन से कड़ा जुड़ाव\n        _smtpClient = new SmtpClient("smtp.gmail.com", 587);\n    }\n\n    public void SendEmail(string to, string subject, string body)\n    {\n        // भेजने की लॉजिक\n    }\n}\n\npublic class NotificationService\n{\n    private EmailService _emailService;\n\n    public NotificationService()\n    {\n        _emailService = new EmailService(); // कड़ा जुड़ाव\n    }\n\n    public void NotifyUser(string email)\n    {\n        _emailService.SendEmail(email, "सूचना", "नमस्ते!");\n    }\n}
\n\n

इस तरीके की कमियां:

\n
    \n
  • उच्च कपलिंग (tight coupling): NotificationService और EmailService क्लासेज़ एक-दूसरे से कड़ी जुड़ी हुई हैं।
  • \n
  • टेस्टिंग में कठिनाई: यूनिट टेस्टिंग के दौरान EmailService को मॉक ऑब्जेक्ट से बदलना संभव नहीं है।
  • \n
  • विस्तार में कठिनाई: अगर SMS नोटिफिकेशन जोड़ना हो, तो NotificationService के अंदर लॉजिक बदलना पड़ेगा।
  • \n
\n\n

C# में Dependency Injection का कार्यान्वयन

\n\n

DI इन समस्याओं को तीन मुख्य तरीकों से हल करता है: कंस्ट्रक्टर इंजेक्शन, प्रॉपर्टी इंजेक्शन और मेथड इंजेक्शन। सबसे आम और अनुशंसित तरीका है कंस्ट्रक्टर इंजेक्शन (Constructor Injection)।

\n\n

चरण 1. इंटरफ़ेस बनाएं

\n

पहले एक एब्स्ट्रैक्शन (इंटरफ़ेस) बनाएं जो संदेश भेजने के लिए कॉन्ट्रैक्ट को परिभाषित करता है:

\n\n
public interface IMessageSender\n{\n    void Send(string to, string message);\n}
\n\n

चरण 2. विशिष्ट सेवाएं लागू करें

\n

अब इस इंटरफ़ेस की कई इम्प्लीमेंटेशन बनाएं:

\n\n
public class EmailSender : IMessageSender\n{\n    public void Send(string to, string message)\n    {\n        Console.WriteLine($"ईमेल भेजा जा रहा है {to} पर: {message}");\n    }\n}\n\npublic class SmsSender : IMessageSender\n{\n    public void Send(string to, string message)\n    {\n        Console.WriteLine($"SMS भेजा जा रहा है {to} पर: {message}");\n    }\n}
\n\n

चरण 3. कंस्ट्रक्टर के जरिए DI लागू करें

\n

अब NotificationService क्लास खुद डिपेंडेंसी नहीं बनाती, बल्कि उन्हें कंस्ट्रक्टर के जरिए प्राप्त करती है:

\n\n
public class NotificationService\n{\n    private readonly IMessageSender _messageSender;\n\n    // कंस्ट्रक्टर के जरिए डिपेंडेंसी इंजेक्शन\n    public NotificationService(IMessageSender messageSender)\n    {\n        _messageSender = messageSender;\n    }\n\n    public void Notify(string userContact, string message)\n    {\n        _messageSender.Send(userContact, message);\n    }\n}
\n\n

अब हम आसानी से इम्प्लीमेंटेशन बदल सकते हैं:

\n\n
// Email का उपयोग करें\nvar emailSender = new EmailSender();\nvar emailNotifier = new NotificationService(emailSender);\nemailNotifier.Notify("user@example.com", "ईमेल के जरिए नमस्ते!");\n\n// SMS का उपयोग करें\nvar sms                

ब्लॉग

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