मैं इस समस्या को इस तरह हल कर रहा हूं: निर्भरता के कारखानों को इंजेक्ट करना। उन कारखानों में, पहले निर्भरता को हल करें क्योंकि यह कंटेनर में पंजीकृत है, फिर शेष सभी डेटा को "डिसेरलाइज़िंग": json.net मौजूदा ऑब्जेक्ट में फ़ील्ड्स को पॉप्युलेट करने की अनुमति देता है।
जैसा कि कारखानों का कोड IoC कंटेनर के वायरिंग कोड के साथ होता है, मुझे नहीं लगता कि container.Resolve
कारखाने के अंदर का उपयोग नियम का उल्लंघन करता है, जिसका container
उपयोग कोड में सिर्फ एक जगह पर किया जाना है: जहां सभी वायरिंग होती है।
अब तक, मैं इस प्रक्रिया को स्वचालित बनाने की कोशिश कर रहा हूं (जैसा कि मैं उस दृष्टिकोण का परीक्षण कर रहा हूं, उसके विपरीत) प्रतिबिंब का उपयोग करके। हां, json.net deserialization से बहुत कुछ नहीं होता है, इसका एक हिस्सा कस्टम कोड के साथ प्रतिस्थापित किया जाता है, लेकिन मुझे लगता है, परेशान क्यों होते हैं।
साथ ही, इस मामले पर आपके अंतिम विचार / निर्णय क्या थे? इस पोस्ट को पढ़ने के बाद मैं दो तरीके देखता हूं: deserialize, फिर इंजेक्ट करें; या इंजेक्ट करें, फिर deserialize (populate) करें। और मुझे अभी भी अपना रास्ता बेहतर लग रहा है। इसके विरोध में दलीलें सुनकर खुशी होगी (मैं इस बारे में, कि मेरा रास्ता मेरे मामले के लिए बेहतर हो सकता है, लेकिन अच्छे वैकल्पिक मामलों की कल्पना नहीं कर सकता, जहां यह विफल हो जाता है, बस कुछ मामूली अनुमान हैं)
This would eliminate the possibility of using Constructor injected DI
-- क्यों? आपके पास अभी भी पैरामीटराइज्ड इंस्ट्रक्टर हो सकते हैं, इसलिए जब तक आप क्रमांकन प्रयोजनों के लिए एक डिफ़ॉल्ट कंस्ट्रक्टर शामिल करते हैं (यदि आप चाहें तो डिफॉल्ट कंस्ट्रक्टर निजी हो सकता है)।