क्षमा करें अगर यह वास्तव में एक मूल प्रश्न है लेकिन यह वास्तव में मेरे लिए हो रहा है। मुझे वास्तव में डीआई के विचार पसंद हैं, यह वास्तव में मेरे परीक्षण के साथ मेरी मदद करता है लेकिन मुझे लगता है कि मैंने एक ईंट की दीवार को थोड़ा सा मारा है। इसलिए मैं दो प्रकार के होते हैं: तो नियम है कि आप के लिए पूछ निम्नलिखितDI ऑब्जेक्ट ग्राफ़ बिल्डिंग - तर्क और निर्माण ग्राफ को अलग करना
Table(ITableCommandRunner tableRunner,
IQueryProvider queryProvider,
IDataReader reader,
string Name)
अब तालिका वस्तु काफी केवल उन वस्तुओं का उपयोग करता है:
Table
TableManager
अब तालिका वस्तु इस तरह उस पर एक निर्माता है आपको जो चाहिए वह मैं उन्हें पास करता हूं। अब मेरी टेबल मैनेजर ऑब्जेक्ट का उपयोग टेबल टेबल खोलने और बंद करने के लिए किया जाता है। केवल एक चीज जिसकी जरूरत है वह एक ITableCommandRunner है, इसलिए मैं इसे निर्माता में पास करता हूं।
TableManager(ITableCommandRunner tablrunner)
ठीक है यह ठीक है लेकिन TableManager.OpenTable आदेश में मैं ITableCommandRunner पर खुला तालिका commmand फोन और उसके बाद का निर्माण एक नया टेबल वस्तु वापस पारित करने के लिए की जरूरत है।
public ITable OpenTable(string tableName)
{
// Call open table command on tablerunner.
// I need a IQueryProvider and IDataReader to pass to the table.
return new Table<TEntity>(this.tablerunner, provider,reader, tableName);
}
लेकिन अब मेरा खुला तालिका आदेश में मैं एक IDataReader और IQueryProvider करना है। यदि मैं उन्हें टेबलमैनेजर के निर्माता में पास करता हूं, तो यह उल्लंघन नहीं करता है कि "ऑब्जेक्ट्स को केवल एक आंतरिक प्रकार में पास करने के लिए लेना और वास्तव में उनका उपयोग नहीं करना"।
मुझे सच में यकीन नहीं है कि मैं यह कैसे करता हूं। क्या कोई इसमें मेरी सहायता कर सकता है?
मुझे यकीन नहीं है कि मैं ऑब्जेक्ट निर्माण और तर्क कैसे अलग करता हूं।
मुझे लगता है कि मुझे प्रबंधक में IQueryProvider और IDataReader लेना पड़ सकता है। टेबल मैनेजर एक अलग नाम के साथ सिर्फ एक कारखाना है। मैंने मिस्को हेवरी के साथ डीआई पर Google तकनीक की बात देखी और वह जो कहता है उसके साथ सहमत हूं लेकिन मुझे उस स्थिति के वास्तविक दुनिया के उदाहरण कभी नहीं मिल सकते हैं। यह कहना अच्छा है और कहने के लिए अच्छा है "ऑब्जेक्ट्स को पास करने के लिए न लें उन्हें नीचे "लेकिन बिना किसी उदाहरण के इसका मतलब कुछ भी नहीं है। और मैं काम कर रहा हूं और एसडीके इसलिए हर हिस्से को अकेले खड़े होने की जरूरत है। –
मेरे रान के बारे में क्षमा करें। धन्यवाद, कम से कम मुझे पता है कि मैं इस समस्या के साथ अकेला नहीं हूं। –