कपल्ड (निर्भर) ऑब्जेक्ट्स को डिकपल्ड (स्वतंत्र) ऑब्जेक्ट्स में बदलने की प्रक्रिया को डिपेंडेंसी इंजेक्शन (DI) कहा जाता है।
डिपेंडेंसी इंजेक्शन के प्रकार
- कंस्ट्रक्टर इंजेक्शन
- सेटर इंजेक्शन (प्रॉपर्टी इंजेक्शन)
- इंटरफेस-आधारित इंजेक्शन
- सर्विस लोकेटर इंजेक्शन
सेटर इंजेक्शन (Getter/Setter Injection)
गेटर और सेटर इंजेक्शन डिफ़ॉल्ट पब्लिक प्रॉपर्टी प्रोसीजर जैसे get { } और set { } का उपयोग करके निर्भरता को इंजेक्ट करता है।
उदाहरण
public interface IService
{
string ServiceMethod();
}
public class ClaimService : IService
{
public string ServiceMethod()
{
return "ClaimService is running";
}
}
public class AdjudicationService : IService
{
public string ServiceMethod()
{
return "AdjudicationService is running";
}
}
public class BusinessLogicImplementation
{
private IService _client;
public IService Client
{
get { return _client; }
set { _client = value; }
}
public void SetterInj()
{
Console.WriteLine("Getter and Setter Injection ==> Current Service : {0}", Client.ServiceMethod());
}
}
उपयोग (Consuming)
BusinessLogicImplementation ConInjBusinessLogic = new BusinessLogicImplementation();
ConInjBusinessLogic.Client = new ClaimService(); // प्रॉपर्टी के माध्यम से इंजेक्शन
ConInjBusinessLogic.SetterInj();
सेटर इंजेक्शन के फायदे और नुकसान
| फायदे | नुकसान |
|---|---|
| सरल और समझने में आसान | ऑब्जेक्ट अवैध स्थिति में हो सकता है (निर्भरता सेट होने से पहले) |
| निर्भरता को बाद में बदला जा सकता है | कंस्ट्रक्टर इंजेक्शन की तुलना में कम स्पष्ट |
| वैकल्पिक निर्भरताओं के लिए उपयुक्त | अपरिवर्तनीयता (immutability) का समर्थन नहीं करता |
कब उपयोग करें
- जब निर्भरता वैकल्पिक हो
- जब निर्भरता को रनटाइम पर बदलने की आवश्यकता हो
- लेगेसी कोड के साथ काम करते समय जहां कंस्ट्रक्टर इंजेक्शन संभव न हो