अतीत में, मैंने swiftsuspenders का उपयोग किया जो एक क्रियालेख 3 आईओसी नियंत्रक है। मूल रूप से स्विट्फसस्पेंडर के पहले संस्करण में निनजेक्ट कर्नेल के समान कुछ था जिसे इंजेक्टर कहा जाता था।मुझे और अधिक निपुण व्यावहारिक उदाहरणों की आवश्यकता है
यदि मैं एक एप्लिकेशन इंजेक्टर बनाना चाहता हूं (चलिए कहते हैं कि आवेदन के दौरान सबसे प्रासंगिक मैपिंग का उपयोग किया जाए), तो मुझे एप्लिकेशन कक्षाओं में इंजेक्टर को इंजेक्ट करना पड़ा।
मुझे आश्चर्य है कि आवेदन में कई कक्षाओं में kernel.get <> का उपयोग करने का अभ्यास क्या है। क्या मुझे कर्नेल को इंजेक्ट करना चाहिए?
व्यक्तिगत रूप से मैं kernel.inject का उपयोग करता हूं लेकिन अगर मैं kernel.inject कर सकता हूं तो मैं वास्तव में निर्भरता को मैन्युअल रूप से इंजेक्ट कर सकता हूं, जो शायद बेहतर (चुंबन) है।
टेस्ट केस अच्छे हैं, लेकिन वे वास्तविक व्यावहारिक मुद्दों से बहुत दूर हैं, इसलिए मुझे आशा है कि आप इस बिंदु को स्पष्ट करने में मेरी सहायता कर सकते हैं। धन्यवाद।
संपादित करें: मैंने देखा है कि कुछ लोग "रूट कंटेनर" के बारे में बात करते हैं, ऐसा लगता है कि यह अवधारणा है जिसे मैं ढूंढ रहा हूं। मुझे रूट कंटेनर कैसे सेट अप करना चाहिए और अन्य एप्लिकेशन क्लास को यह कैसे पता होना चाहिए?
EDIT2 नमूना कोड (कृपया उन त्रुटियों को क्षमा कर, यह सिर्फ उदाहरण के लिए है):
class SomeClass
{
public SomeClass()
{
Command cmd = new Command();
cmd.execute();
}
}
class SomeOtherClass:ISomeOtherClass
{
public void allright()
{
//right
}
}
class Command
{
ISomeOtherClass dependency;
void execute()
{
dependency.allright();
}
}
Program.Main()
{
IKernel kernel = new StandardKernel();
kernel.Bind<SomeClass>().ToSelf().InSingletonScope();
kernel.Bind<ISomeOtherClass>().To<SomeOtherClass>();
SomeClass sc = kernel.Get<SomeClass>();
}
मैं अभी तक यह परीक्षण नहीं किया था, क्योंकि मैं अभी भी कुछ आरंभीकरण मुद्दों के साथ लड़ रहा हूँ, लेकिन मेरे सवाल का, कैसे है क्या कमांड क्लास SomeOtherClass के बारे में जान सकता है? मेरी वर्तमान परिकल्पना कुछ क्लास में कर्नेल को इंजेक्ट करना है और विधि इंजेक्ट का उपयोग करना है।
उत्तर के लिए धन्यवाद यह समझ में आता है, लेकिन यह सही होने पर, यह केवल यह कहता है कि सभी निर्भरताओं को पहले से जाना जाना चाहिए। क्या होता है जब यह संभव नहीं होता है? (निश्चित रूप से जो मैं कहता हूं वह केवल तभी समझ में आता है जब वस्तुओं को गतिशील रूप से बनाया जा सके) – sebas
मान लें कि कुछ क्लास को गतिशील वस्तुओं की एक निश्चित संख्या बनाना चाहिए। कुछ क्लास की तरह स्तर बन जाते हैं और इसे 30 सितारे बनाना चाहिए। सितारों में कुछ निर्भरताएं होती हैं, कर्नेल का उपयोग करके सितारों पर स्तर उन निर्भरताओं को कैसे इंजेक्ट कर सकता है? – sebas
यह एक अच्छा सवाल है, और आप सरल निर्भरता इंजेक्शन प्रश्नों से आगे बढ़ रहे हैं जिनका उत्तर इस प्रारूप में दिया जा सकता है। इस तरह की स्थिति (जटिल वस्तु निर्माण) को एक और टुकड़ा की आवश्यकता होती है, यही कारण है कि रेमो ने अपने जवाब में कारखानों का उल्लेख किया। आपको या तो स्टार-बिल्डिंग फैक्ट्री बनाने की जांच करनी चाहिए और उसे कुछ क्लास में इंजेक्ट करना चाहिए, या निनजेक्ट को फैक्ट्री विधि या बाइंड() के उपयोग से सितारों को हल करना चाहिए। ToProvider()। –