संतुष्ट करेगा यह मैं क्या डि कंटेनर से चाहते हैं: ब्याज कीकौन सा डि कंटेनर इस
public class Class
{
public Class(IDependency dependency, string data) { }
}
var obj = di.Resolve<Class>(() => new Class(null, "test"));
अंक:
- निर्माता में दोनों निर्भरता और डेटा को हल कर सकते हैं।
- कन्स्ट्रक्टर पैरामीटर पास करने के लिए टाइप-सेफ सिंटैक्स का उपयोग कर सकते हैं (सटीक वाक्यविन्यास भिन्न हो सकता है)। हां मैं कन्स्ट्रक्टर तर्क प्राप्त कर सकता हूं (अभिव्यक्ति.बॉडी न्यूएक्सप्रेस के रूप में) - लेकिन मुझे यह पता लगाने के लिए एक तरीका चाहिए कि कंटेनर में कौन से तर्क पंजीकृत हैं।
एक और प्रमुख आवश्यकता यह है कि मैं अपने घटकों को स्वचालित रूप से उठाया जाना चाहता हूं, यानी मैं कक्षा पंजीकृत नहीं करना चाहता हूं - मैं चाहता हूं कि आईओसी इसे उठाए क्योंकि यह जानता है कि आईडी निर्भरता को कैसे हल किया जाए।
इसके अलावा, संपत्ति इंजेक्शन कभी-कभी उपयोगी हो सकती है, लेकिन यह वैकल्पिक है।
प्रश्न वास्तव में सुविधाओं के संयोजन के बारे में है - उनमें से सभी - टाइप-सुरक्षित, पैरामीटर, स्वचालित पिक-अप ... एक सुविधा की जांच करना आसान है, लेकिन उनमें से एक संयोजन सत्यापित करना आसान नहीं है जब तक कि कोई विशेष कंटेनर से परिचित न हो और इसकी विशेषताओं को जानता हो। इस प्रकार सवाल।
मुझे नहीं लगता कि ऐसा कोई कंटेनर है जो उस तरह के वाक्यविन्यास का समर्थन करता है। लेकिन कई (लगभग सभी) कंटेनर स्पष्ट कंटेनर पैरामीटर का समर्थन करते हैं, और शायद क्लीनर सिंटैक्स के साथ। –
"शायद" उत्तर नहीं है ... जहां तक मुझे पता है कि मैं पैरामीटर की ऑब्जेक्ट [] सरणी पास कर सकता हूं लेकिन यह स्पष्ट रूप से टाइप-सुरक्षित नहीं है ... मैं पैरामीटर ऑर्डर बदल सकता हूं और रनटाइम तक इसके बारे में नहीं जानूंगा । – queen3
क्लीनर द्वारा मेरा मतलब था कि आपको अपने कोड में सीटीआर का स्पष्ट रूप से उपयोग करने की आवश्यकता नहीं है, जैसा कि आप ऊपर करते हैं। आपने जो लिखा है उसके बजाए, क्यों नहीं: 'var obj = new class (di.Resolve()," test ");'? –