निर्भरता का इंजेक्शन एक भयानक नाम (IMO) 1 है न कि सीधी अवधारणा के लिए। यहाँ एक उदाहरण है:
- आपके पास एक विधि (या विधियों के साथ वर्ग) है जो X करता है (जैसे डेटाबेस से डेटा पुनर्प्राप्त करता है)
- एक्स करने के हिस्से के रूप में, कहा गया है कि विधि एक आंतरिक संसाधन (जैसे
DbContext
) बनाती है और प्रबंधित करती है । इस आंतरिक संसाधन को एक निर्भरता कहा जाता है
- आप संसाधन (अर्थात
DbContext
) बनाने और प्रबंधित करने की विधि को हटा देते हैं और इस संसाधन को प्रदान करने के लिए कॉलर की जिम्मेदारी (विधि पैरामीटर के रूप में या वर्ग के तात्कालिकता पर) प्रदान करते हैं
- अब आप निर्भरता इंजेक्शन कर रहे हैं।
[१] : मैं एक निचले स्तर की पृष्ठभूमि से आता हूं और मुझे निर्भरता इंजेक्शन सीखने में महीनों लग गए क्योंकि नाम का अर्थ है कि यह DLL इंजेक्शन की तरह कुछ अधिक जटिल होगा । तथ्य यह है कि विज़ुअल स्टूडियो (और हम सामान्य रूप से डेवलपर्स) .NET लाइब्रेरी (DLL, या असेंबली ) को संदर्भित करते हैं कि एक परियोजना निर्भर करती है क्योंकि निर्भरताएं बिल्कुल भी मदद नहीं करती हैं। यहां तक कि डिपेंडेंसी वॉकर (निर्भर । Exe) जैसी कोई चीज भी है ।
[संपादित करें] मुझे लगा कि कुछ डेमो कोड कुछ के लिए काम आएगा, इसलिए यहाँ एक (C # में) है।
निर्भरता इंजेक्शन के बिना:
public class Repository : IDisposable
{
protected DbContext Context { get; }
public Repository()
{
Context = new DbContext("name=MyEntities");
}
public void Dispose()
{
Context.Dispose();
}
}
आपका उपभोक्ता तब कुछ ऐसा करेगा:
using ( var repository = new Repository() )
{
// work
}
निर्भरता इंजेक्शन पैटर्न के साथ लागू एक ही वर्ग इस तरह होगा:
public class RepositoryWithDI
{
protected DbContext Context { get; }
public RepositoryWithDI(DbContext context)
{
Context = context;
}
}
अब यह कॉल करने वाले की DbContext
ज़िम्मेदारी है कि वह आपकी कक्षा में तुरंत और पास (ग़लती, इंजेक्शन ) करे:
using ( var context = new DbContext("name=MyEntities") )
{
var repository = new RepositoryWithDI(context);
// work
}