2010-05-13 10 views
5

मुझे विस्तार विधियों के साथ कुछ स्थिर वर्ग मिल गए हैं जो भंडार पैटर्न का उपयोग करके इकाइयों को 'व्यावसायिक तर्क' जोड़ते हैं।विस्तार कार्यों के साथ एक स्थैतिक वर्ग में खुद को इंजेक्ट करने के लिए कैसे करें

अब कभी-कभी मुझे इन एक्सटेंशन फ़ंक्शंस में एक नया IRepository बनाना होगा।

मैं वर्तमान में वस्तु मैं विस्तार कर रहा हूँ के माध्यम से अपने Ninject गिरी पहुंच कर उसके चारों ओर काम कर रहा हूँ, लेकिन यह वास्तव में बदसूरत है:

public static IEnumerable<ISomething> GetSomethings(this IEntity entity) 
{ 
    using (var dataContext = entity.kernel.Get<IDataContext>()) 
     return dataContext.Repository<ISomething>().ToList(); 
} 

मैं भी एक स्थिर निर्माता, कर सकता है से किसी भी तरह Ninject गिरी तक पहुँचने एक कारखाना, क्या इसके लिए निंजा 2 में पहले से ही आधारभूत संरचना है?

क्या कोई बेहतर समाधान जानता है? व्यापार तर्क को लागू करने के लिए किसी के पास इस तरह की कुछ टिप्पणियां हैं।

उत्तर

4

विस्तार विधियों के मुद्दे पर और उन्हें सामान कैसे प्राप्त होते हैं। - एक वैश्विक कर्नेल है और सेवा स्थान (जो निर्भरता इंजेक्शन से अलग है) करने के लिए ड्रॉप डाउन

  1. सेवा स्थान: आप दो दृष्टिकोण है। समस्या यहाँ यह है कि आपके इकाई (या इसके एक्सटेंशन) उसके संदर्भ संभालने और इसके बजाय यह

  2. की मांग आप बात आप पास आप का विस्तार कर रहे एक विस्तार विधि हैं है कि तुम क्या जरूरत है नहीं होना चाहिए है

जैसा कि आपने कम या ज्यादा अनुमान लगाया है, यह (वैश्विक कर्नेल जो डंपिंग ग्राउंड बन जाता है) ऐसा कुछ है जो निनजेक्ट आपको से बाहर करने की कोशिश करता है। आम तौर पर, जो कुछ भी आप उपयोग कर रहे हैं उसका विस्तार (उदा। एमवीसी या डब्ल्यूसीएफ) अगर उपयुक्त हो तो कुछ प्रदान करेगा। उदाहरण के लिए, डब्ल्यूसीएफ एक्सटेंशन में http://github.com/ninject/ninject.extensions.wcf/blob/master/source/Ninject.Extensions.Wcf/NinjectServiceHost.cs

यहां बड़ी समस्या यह है कि इस तरह की निर्भरता शायद इकाई स्तर तक फैल नहीं सकती है - इसे सेवा स्तर पर रहना चाहिए और वहां से प्रचारित होना चाहिए (डीडीडी शब्दावली का उपयोग करके)।

आप this answer by me दिलचस्प लगें के रूप में यह

+0

अपने जवाब के लिए धन्यवाद (एक Ninject तकनीक है कि एक वास्तुशिल्प अवधारणाओं के नजरिए से अधिक) इस जमीन थोड़ा शामिल किया गया। मैं सेवा स्थान का बहुत शौक नहीं हूं, मेरी राय में यह अब भी मैं जो कर रहा हूं उससे भी उलझन में हूं। मैं यहां बड़ी समस्या के साथ जाऊंगा, यह व्यवसाय तर्क जोड़ने का सही स्थान नहीं है। मुझे आशा थी कि एक स्थिर निर्माता को इंजेक्ट करने के लिए कुछ जादू तरीका था। तो मैं अपना डिजाइन रख सकता था और इसे बहुत बदसूरत नहीं बना सकता था। मैं प्रश्न कुछ और घंटों के लिए खुला रखूंगा और यदि कोई एओपी प्रतिभा नहीं आती है तो मैं आपका जवाब स्वीकार करूंगा! – JJoos

+0

आपको यहां कोई प्रतिभा नहीं मिलेगी - केवल वे लोग जो फ़ोरम पर उत्तर निकालते हैं - वे सभी निनजेक्स्ट मेलिंग सूची पर हैं: डी नीचे लिन स्थिर विधियों [जैसे विस्तार विधियों] के लिए है, कि कोई संदर्भ या अवसर नहीं है किसी भी आसान तरीके से हस्तक्षेप करने के लिए। विभिन्न तरीकों से 'नई' बिंदु के बिंदु पर इकाई में संदर्भ को प्रवाह करना संभव है (एनएचबीरनेट और एल 2 एस प्रत्येक के अपने तरीके हैं)। समस्या यह नहीं है कि आप संस्थाएं अपने हाथों में मामलों को लेना चाहते हैं और अन्य भंडारों में घूमते हुए घूमते हैं। और दक्षता भी पीड़ित होगी - जब तक आप एक हिरो-जैसे मार्ग नहीं जाते। –

+0

इवांस डीडीडी पुस्तक (गंभीर रूप से पढ़ना कोई फर्क नहीं पड़ता कि आप क्या करते हैं, भले ही यह आपके सिर को अवशोषित करने के लिए थोड़ा सा दर्द करे) और/या http://thinkddd.com/ वास्तव में आपको अपने समग्र डिजाइन के माध्यम से सोचने में मदद करेगा ।यदि आप वास्तव में भारी कर्तव्य एओपी सामान की तलाश में हैं, तो आप पोस्टशर्प की पीथ दिशा में पाएंगे। –

संबंधित मुद्दे

 संबंधित मुद्दे