Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C#

सी # में निर्भरता इंजेक्शन की व्याख्या करें

निर्भरता एक ऐसी वस्तु है जिस पर दूसरी वस्तु निर्भर करती है। निर्भरता इंजेक्शन (या उलटा) मूल रूप से उन वस्तुओं को प्रदान कर रहा है जिन्हें किसी वस्तु की आवश्यकता होती है, बजाय इसके कि वह स्वयं वस्तुओं का निर्माण करे। यह एक उपयोगी तकनीक है जो परीक्षण को आसान बनाती है, क्योंकि यह आपको निर्भरताओं का मजाक उड़ाने की अनुमति देती है।

उदाहरण के लिए, यदि कक्षा ए कक्षा बी पर एक विधि कहता है, जो बदले में कक्षा सी पर एक विधि कहता है, इसका मतलब है कि ए बी पर निर्भर करता है और बी सी पर निर्भर करता है। निर्भरता इंजेक्शन का उपयोग करके, हम कक्षा सी से कक्षा बी का एक उदाहरण पास कर सकते हैं , और बी और सी के उदाहरणों को बनाने के लिए इन वर्गों को रखने के बजाय बी से कक्षा ए का उदाहरण पास करें।

नीचे दिए गए उदाहरण में, क्लास रनर की क्लास लॉगर पर निर्भरता है। ध्यान दें कि रनर क्लास में कंस्ट्रक्टर में लकड़हारा का एक उदाहरण बनाता है। इस कोड में कुछ समस्याएं हैं।

  • यह लकड़हारा वर्ग को रनर से जोड़ता है और हम रनर को संशोधित किए बिना इसे अन्य वर्गों के साथ प्रतिस्थापित नहीं कर सकते।

  • अगर लकड़हारे की कोई निर्भरता है, तो लकड़हारे को तत्काल लकड़हारा करने से पहले उन्हें कॉन्फ़िगर करना होगा।

  • परीक्षण कठिन है। यदि लकड़हारा एक संसाधन-गहन वर्ग है, जैसे कि नेटवर्क या फ़ाइल सिस्टम तक पहुँच, तो यह परीक्षण को धीमा कर देगा। हम इसे आसानी से नहीं बदल सकते।

using System;
class Program{
   static void Main(string[] args){
      var runner = new Runner();
      runner.Run();
   }
}
class Runner{
   private Logger _logger;
   public Runner(){
      _logger = new Logger();
   }
   public void Run(){
      // Do some work
      _logger.Log("Message to be logged");
   }
}
class Logger{
   public void Log(string message){
      Console.WriteLine(message);
   }
}

निर्भरता इंजेक्शन का उपयोग करते हुए, हम एक ठोस वस्तु के बजाय एक इंटरफ़ेस ILogger को स्वीकार करने के लिए रनर के निर्माता को संशोधित करते हैं। ILogger को लागू करने के लिए हम लकड़हारा वर्ग को बदलते हैं। यह हमें रनर के कंस्ट्रक्टर को लकड़हारा वर्ग का एक उदाहरण पास करने की अनुमति देता है। इसका लाभ यह है कि परीक्षण के दौरान, हम एक टेस्टलॉगर क्लास बना सकते हैं जो ILogger को लागू करता है और उसे रनर के कंस्ट्रक्टर को पास करता है।

उदाहरण

using System;
class Program{
   static void Main(string[] args){
      var logger = new Logger();
      var runner = new Runner(logger);
      runner.Run();
   }
}
class Runner{
   private ILogger _logger;
   public Runner(ILogger logger){
      _logger = logger;
   }
   public void Run(){
      // Do some work
      _logger.Log("Message to be logged");
   }
}
interface ILogger{
   void Log(string message);
}
class Logger : ILogger{
   public void Log(string message){
      Console.WriteLine(message);
   }
}

आउटपुट

Message to be logged

  1. C# में एक वर्ग की अवधारणा की व्याख्या करें

    सी # में एक वर्ग आवश्यक प्रकारों में से एक है। हम समस्या क्षेत्र के लिए प्रासंगिक वस्तुओं के लिए एक ब्लूप्रिंट के रूप में एक वर्ग के बारे में सोच सकते हैं। यह एक टेम्प्लेट है जिससे हम ऑब्जेक्ट बनाते हैं, संरचना और व्यवहार को परिभाषित करते हैं जो इस वर्ग से बनाए गए ऑब्जेक्ट्स के सेट द्वारा साझा किए ज

  1. सी # में कंसोल क्लास

    C# में कंसोल क्लास का उपयोग कंसोल अनुप्रयोगों के लिए मानक इनपुट, आउटपुट और त्रुटि स्ट्रीम का प्रतिनिधित्व करने के लिए किया जाता है। आइए C# - . में कंसोल वर्ग के गुणों के कुछ उदाहरण देखें Console.CursorLeft संपत्ति C# में कंसोल के CursorLeft को बदलने के लिए, Console.CursorLeft प्रॉपर्टी का उपयोग कर

  1. डिकूपिंग रूबी:डेलिगेशन बनाम डिपेंडेंसी इंजेक्शन

    ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग . में , एक वस्तु अक्सर कार्य करने के लिए दूसरी वस्तु पर निर्भर करती है। उदाहरण के लिए, अगर मैं वित्त रिपोर्ट चलाने के लिए एक साधारण वर्ग बनाता हूं: class FinanceReport def net_income FinanceApi.gross_income - FinanceApi.total_costs end end हम कह सकते हैं कि