2013-01-19 15 views
5

क्या ईएफ 6 के साथ एक कस्टम ऑब्जेक्ट इंस्टेंस निर्माता इंजेक्ट करने का कोई तरीका है? मुझे क्या करना है मैट्रियलाइजेशन होने से पहले ईएफ को इकाइयों के उदाहरण प्रदान करना है।कस्टम इकाई भौतिकरण

मूल रूप से मैं अपनी पीओसीओ इकाई को गैर पैरामीटर रहित कन्स्ट्रक्टर के साथ परिभाषित करने में सक्षम होना चाहता हूं, इसलिए डी एग्रीगेट का उपयोग करने में सक्षम होने के लिए, अंत में ईएफ के साथ जारी है।

मुझे लगता है कि मैं ObjectMaterialized घटना का उपयोग कर कुछ इसी तरह हासिल कर सकते हैं कर दिया है:

var oc = (this as IObjectContextAdapter).ObjectContext; 
oc.ObjectMaterialized += (s, e) => 
{ 
    //resolve and inject dependencies here using e.g. public properties 
}; 

लेकिन मैं वास्तव में निर्भरता निर्माता पर घोषित करके हमें खुशी होगी।

कोई विचार? चीयर्स, .m

+0

यदि मैं पूछ सकता हूं, आप किस निर्भरता को इंजेक्ट करना चाहते हैं? –

+0

मूल रूप से मेरे डोमेन मॉडल समेकित डोमेन सेवाएं। मैं मोंगोडीबी और रावेनडीबी अनुभव से आ रहा हूं जहां भंडारण पर एक डोमेन मॉडल जारी रहा है, वास्तव में आसान है और deserialization समय पर निर्भरता इंजेक्शन इंजेक्शन वास्तव में आसान है, इसलिए मैं कार्य करना चाहता हूं अगर मैं ईएफ 6 (अल्फा 2) के साथ समान समर्थन प्राप्त कर सकता हूं वर्तमान में)। मूल रूप से मैं इकाइयों को हल करने के लिए अपने कंटेनर का उपयोग करने के लिए ईएफ को बताने का एक तरीका खोजने की कोशिश कर रहा हूं, या कम से कम मुझे यह पूछने के लिए कि संस्थाओं को कैसे हल करें :-) –

उत्तर

4

डिफ़ॉल्ट ऑब्जेक्ट कॉन्टेक्स्ट का उपयोग करके, मुझे विश्वास नहीं है कि ईएफ कोड को देखते हुए यह संभव है। आखिरकार वस्तुओं को ObjectContext.CreateObject द्वारा बनाया गया है। यह दो चीजों में से एक है: यह या तो डिफ़ॉल्ट कन्स्ट्रक्टर कहलाता है या अन्यथा, अगर प्रॉक्सी सृजन सक्षम है, तो यह प्रासंगिक प्रॉक्सी प्रकार बनाता है। प्रॉक्सी प्रकार का उपयोग उन्नत परिवर्तन ट्रैकिंग और आलसी लोडिंग गुणों के लिए किया जाता है।

हालांकि, ObjectContext.CreateObject वर्चुअल है, इसलिए कोई इसे व्युत्पन्न कक्षा में ओवरराइड कर सकता है। उस व्युत्पन्न कक्षा को कंटेनर (या आजीवन गुंजाइश) के संदर्भ में प्रदान किया जाएगा और फिर, ओवरराइड CreateObject कॉल में, इसका उपयोग इकाई को हल करने के लिए किया जाएगा।

प्रश्न तब बनता है, के लिए उपयोग करने के लिए ObjectContext के रूप में कोई व्युत्पन्न प्रकार कैसे निर्दिष्ट करता है? खैर, a constructor that takes an instance of the ObjectContextDbContext का उपयोग करना चाहिए।

यह वह जगह है जहां मेरा विचार रेल से थोड़ी दूर जाना शुरू कर देता है, क्योंकि ObjectContext को कनेक्शन स्ट्रिंग में उपयोग किए जाने वाले मॉडल के बारे में to be told की आवश्यकता होती है। मुझे लगता है कि इसका मतलब यह हो सकता है कि एक कोड पहला दृष्टिकोण काम नहीं करेगा क्योंकि मॉडल आलसी रूप से बनाया गया है और इस प्रकार DbContext से पहले उपलब्ध नहीं है। हालांकि, मॉडल के पहले दृष्टिकोण के लिए, शायद यह काम कर सकता है?