हम ASP.net MVC का उपयोग कर रहे हैं।
इनमें से कौन सबसे अच्छा DI फ्रेमवर्क निनजेक्ट या यूनिटी है और क्यों?
हम ASP.net MVC का उपयोग कर रहे हैं।
इनमें से कौन सबसे अच्छा DI फ्रेमवर्क निनजेक्ट या यूनिटी है और क्यों?
जवाबों:
पिछली बार जब मैंने उनमें से किसी एक को देखा तो मुझे निनॉज़ थोड़ा बेहतर लगा। लेकिन दोनों में अपनी कमियां हैं।
Ninject में एक बेहतर धाराप्रवाह-विन्यास योजना है। एकता ज्यादातर XML कॉन्फ़िगरेशन पर भरोसा करने लगती है। Ninject का मुख्य दोष यह है कि आपको Ninject.Core को अपने कोड में हर जगह [Inject] विशेषताएँ जोड़ने की आवश्यकता होती है।
अगर मैं पूछ सकता हूं, तो आप इन दोनों को अपनी पसंद क्यों सीमित कर रहे हैं? मुझे लगता है कि कैसल। विंडसर, ऑटोफेक और स्ट्रक्चरफोर कम से कम अच्छे या बेहतर हैं।
मुझे पता है कि यह एक पुराना सवाल है, लेकिन यहाँ मेरे विचार हैं:
मुझे व्यक्तिगत रूप से Ninject पसंद है। मुझे धाराप्रवाह इंटरफेस और एक्सएमएल से बचना पसंद है। मैं आम तौर पर एक्सएमएल को पसंद करता हूं, बस इस तरह के कॉन्फ़िगर सामान के लिए नहीं। खासकर जब रिफ्लेक्टिंग शामिल है धाराप्रवाह इंटरफेस इसे सही करना आसान बनाते हैं।
मुझे स्ट्रक्चर्सपॉइंट के ऑब्जेक्टफैक्टिंग की याद आती है, लेकिन निनजेक्ट में इसे जोड़ने के लिए आसान वर्कआर्ड हैं।
जब जेफरी बताते हैं कि आपको केवल एक कंस्ट्रक्टर होने पर [Inject] विशेषता का उपयोग नहीं करना है।
मैंने पाया कि मैं न केवल धाराप्रवाह इंटरफेस पसंद करता हूं, क्योंकि वे एक्सएमएल से बचते हैं, बल्कि इसलिए कि वे समय की त्रुटियों का कारण बनते हैं जब मैं उन्हें प्रभावित करता हूं। एक्सएमएल कॉन्फ़िगरेशन नहीं करता है और कम मुझे बेहतर याद रखना है कि मैं बेहतर हूं।
मैं मेंडेल के साथ सहमत हूं, कोई "सर्वश्रेष्ठ" डीआई फ्रेमवर्क नहीं है। यह सिर्फ स्थिति पर निर्भर करता है और उन सभी के पक्ष और विपक्ष हैं। लगता है कि डेविड हेडन ने डॉटनेट रॉक्स पर कहा कि यदि आप एंटलीब के बाकी हिस्सों का उपयोग करते हैं और इससे परिचित हैं तो एकता पसंदीदा विकल्प है। मैं व्यक्तिगत रूप से यूनिटी का उपयोग करता हूं क्योंकि मेरा ग्राहक इस तथ्य को पसंद करता है कि यह डीएलएल पर Microsoft एंटरप्राइज लाइब्रेरी (यूनिटी) कहता है , अगर आपको वह मिलता है जो मैं कह रहा हूं।
मैं इंटरफेस और उनके ठोस कार्यान्वयन की स्थापना के लिए दोनों xml कॉन्फ़िगरेशन का उपयोग करता हूं, लेकिन फिर मैं इंजेक्शन लगाते समय कोड में विशेषताओं का उपयोग करता हूं, जैसे:
<type type="ILogger" mapTo="EntLibLogger">
<lifetime type="singleton"/>
</type>
और कोड में:
[InjectionConstructor]
public Repository([Dependency] ILogger logger)
व्यक्तिगत रूप से मुझे लगता है कि इससे स्पष्ट होता है कि क्या होता है, लेकिन निश्चित रूप से कोई यह तर्क दे सकता है कि आपके पास अपने आवेदन पर एकता के संदर्भ होंगे। यह आप पर निर्भर करता है।
http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison
एकता तेज है लेकिन यह सबसे अच्छा नहीं है