कौन सी C # /। NET डिपेंडेंसी इंजेक्शन फ्रेमवर्क देखने लायक हैं? और आप उनकी जटिलता और गति के बारे में क्या कह सकते हैं।
कौन सी C # /। NET डिपेंडेंसी इंजेक्शन फ्रेमवर्क देखने लायक हैं? और आप उनकी जटिलता और गति के बारे में क्या कह सकते हैं।
जवाबों:
संपादित करें (लेखक द्वारा नहीं): https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc पर IoC फ्रेमवर्क की एक व्यापक सूची उपलब्ध है :
मूल उत्तर इस प्रकार है।
मुझे लगता है कि मैं यहाँ थोड़ा अचार हो रहा हूँ, लेकिन यह ध्यान रखना महत्वपूर्ण है कि DI (निर्भरता इंजेक्शन) एक प्रोग्रामिंग पैटर्न है और इसकी सुविधा है, लेकिन इसके लिए IoC (नियंत्रण का उलटा) की आवश्यकता नहीं है। IoC चौखटे सिर्फ DI को बहुत आसान बनाते हैं और वे DI के ऊपर और ऊपर अन्य लाभों की मेजबानी प्रदान करते हैं।
कहा जा रहा है, मुझे यकीन है कि आप क्या पूछ रहे थे। आईओसी फ्रेमवर्क के बारे में; मैंने Spring.Net और CastleWindsor का बहुत उपयोग किया , लेकिन इसके पीछे असली दर्द यह था कि pesky XML config को आपको लिखना था! वे अब इस तरह से आगे बढ़ रहे हैं, इसलिए मैं पिछले एक या दो साल से स्ट्रक्चर्डपाइप का उपयोग कर रहा हूं , और चूंकि यह धाराप्रवाह टाइपिक्स और रजिस्ट्री का उपयोग करके एक धाराप्रवाह विन्यास में चला गया है, इसलिए आईओसी का उपयोग करने में मेरा दर्द अवरोधक में गिर गया है शून्य से नीचे! मुझे अब यह जानने से एक पूर्ण किक मिलती है कि मेरे IoC कॉन्फ़िगरेशन को संकलन-समय (सबसे अधिक भाग के लिए) पर चेक किया गया है और मेरे पास स्ट्रक्चरप्योर और इसकी गति के साथ आनंद के अलावा कुछ भी नहीं है। मैं यह नहीं कहूंगा कि अन्य लोग रनटाइम में धीमे थे, लेकिन वे मेरे लिए सेटअप करने में अधिक कठिन थे और निराशा ने अक्सर दिन जीता।
अपडेट करें
मैं अपने नवीनतम प्रोजेक्ट पर Ninject का उपयोग कर रहा हूं और इसका उपयोग करने का एक परम आनंद रहा है। शब्द मुझे यहां थोड़ा विफल करते हैं, लेकिन (जैसा कि हम ब्रिटेन में कहते हैं) यह ढांचा 'डॉग्स' है। मैं किसी भी हरे क्षेत्र की परियोजनाओं के लिए इसकी अत्यधिक अनुशंसा करूंगा जहां आप जल्दी से जल्दी चलना चाहते हैं। मुझे जस्टिन एथरेज द्वारा निनजेक्ट स्क्रैंकोस्ट के शानदार सेट से ज़रूरत थी। मैं उस रेट्रो-फिटिंग निनजेक्ट को मौजूदा कोड में बिल्कुल भी समस्या नहीं देख सकता, लेकिन फिर मेरे अनुभव में स्ट्रक्चरुरैप के बारे में भी यही कहा जा सकता है । यह उन दोनों के बीच आगे बढ़ने वाला एक कठिन विकल्प होगा, लेकिन मैं ठहराव की तुलना में प्रतिस्पर्धा करना चाहता हूं और वहां स्वस्थ प्रतिस्पर्धा का एक अच्छा हिस्सा है।
अन्य आईओसी स्क्रैनास्ट भी डिमास्टॉक्स पर यहां देखे जा सकते हैं ।
यह इस बात पर निर्भर करता है कि आप क्या देख रहे हैं, क्योंकि वे प्रत्येक के पास अपने पेशेवरों और विपक्ष हैं।
Spring.NET
यह जावा दुनिया से वसंत से बाहर आने के रूप में सबसे अधिक परिपक्व है। स्प्रिंग में फ्रेमवर्क लाइब्रेरी का बहुत समृद्ध सेट है जो इसे वेब, विंडोज आदि का समर्थन करने के लिए विस्तारित करता है।Castle Windsor
.NET प्लेटफ़ॉर्म में सबसे व्यापक रूप से उपयोग किया जाता है और इसमें सबसे बड़ा पारिस्थितिकी तंत्र है, अत्यधिक विन्यास योग्य / एक्स्टेंसिबल है, इसमें कस्टम लाइफटाइम प्रबंधन है, AOP समर्थन है, इसमें निहित NHibernate समर्थन है और यह सभी भयानक कंटेनर के आसपास है। विंडसर एक पूरे स्टैक का हिस्सा है जिसमें मोनोरेल, एक्टिव रिकॉर्ड आदि शामिल हैं, एनएचबर्नेट स्वयं विंडसर के शीर्ष पर बनाता है।Structure Map
एक आंतरिक DSL के माध्यम से बहुत समृद्ध और महीन दानेदार विन्यास है।Autofac
यह नए युग का एक IoC कंटेनर है, जिसमें निहित कार्यात्मक प्रोग्रामिंग समर्थन है। यह दूसरों की तुलना में जीवनकाल के प्रबंधन पर एक अलग दृष्टिकोण रखता है। ऑटोफेक अभी भी बहुत नया है, लेकिन यह आईओसी के साथ क्या संभव है पर पट्टी को धक्का देता है।Ninject
मैंने सुना है कि एक कम दृष्टिकोण के साथ अधिक नंगे हड्डियां हैं (सुना नहीं अनुभवी)।Unity
है: यह Microsoft (p & p) द्वारा समर्थित और समर्थित है। एकता के पास बहुत अच्छा प्रदर्शन है, और महान दस्तावेज हैं। यह अत्यधिक विन्यास योग्य भी है। इसमें कैसल / स्ट्रक्चर मैप के सभी घंटियाँ और सीटी नहीं हैं।इसलिए संक्षेप में, यह वास्तव में इस बात पर निर्भर करता है कि आपके लिए क्या महत्वपूर्ण है। मैं अन्य लोगों के साथ जाने और मूल्यांकन करने और देखने पर सहमत होता हूं कि कौन फिट बैठता है। अच्छी बात यह है कि आपके पास सिर्फ एक जेली रखने के बजाय डोनट्स का एक अच्छा चयन है।
Autofac। https://github.com/autofac/Autofac यह वास्तव में तेज और बहुत अच्छा है। यहां तुलना के साथ एक लिंक दिया गया है (Ninject के बाद एक मेमोरी लीक मुद्दा तय किया गया है)।
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
निन्यूज महान है। यह वास्तव में तेज़ लगता है, लेकिन मैंने कोई तुलना नहीं की है। मैं जानता हूँ कि नैट, लेखक, ने निन्जे और अन्य डीआई फ्रेमवर्क के बीच कुछ तुलना की थी और निन्जे की गति में सुधार के लिए और अधिक तरीकों की तलाश कर रहा है।
मैंने बहुत से ऐसे लोगों के बारे में सुना है जिनका मैं सम्मान करता हूं कि स्ट्रक्चरुरेशन और कैसल विंडसर के बारे में अच्छी बातें हैं। वे, मेरे दिमाग में, अभी देखने के लिए तीन बड़े हैं।
मैं सरल इंजेक्टर का उपयोग करता हूं :
सरल इंजेक्टर एक आसान, लचीला और तेजी से निर्भरता इंजेक्शन लाइब्रेरी है जो सफलता के गड्ढे की ओर आपके समाधान का मार्गदर्शन करने के लिए सर्वोत्तम अभ्यास का उपयोग करता है।
मैं कैसल का बहुत बड़ा प्रशंसक हूं। मुझे यह सुविधा पसंद है कि यह IoC कंटेनर कहानी से परे भी प्रदान करता है। यह वास्तव में NHibernate, लॉगिंग, AOP, आदि का उपयोग करते हुए सरल करता है । मैं भी बू के साथ विन्यास के लिए बिनसर का उपयोग करता हूं और वास्तव में इसकी वजह से एक भाषा के रूप में बू के साथ प्यार हो गया है।
मैं Ninject की सिफारिश कर सकता हूँ। यह अविश्वसनीय रूप से तेज़ और उपयोग करने में आसान है, लेकिन केवल अगर आपको XML कॉन्फ़िगरेशन की आवश्यकता नहीं है, तो आपको विंडसर का उपयोग करना चाहिए।
मैंने एक दिन का बेहतर हिस्सा सफलता के बिना संघर्ष करते हुए बिताया है ताकि सबसे सरल स्प्रिंग.नेट का उदाहरण काम कर सके। एक्सएमएल फ़ाइल से मेरी असेंबली खोजने के लिए इसे प्राप्त करने का तरीका कभी पता नहीं लगा सका। लगभग 2 घंटे में, दूसरी ओर, मैं निन्यूज काम करने में सक्षम था, जिसमें NUnit और MSTest दोनों के साथ परीक्षण एकीकरण शामिल था।
मैंने पिछले समय में स्प्रिंगनेट का उपयोग किया है और इसके साथ बड़ी सफलता मिली है। मैंने कभी भी इसके साथ कोई भारी उपरिव्यय नहीं देखा, हालाँकि हमने जिस परियोजना का उपयोग किया था वह अपने आप में काफी भारी थी। इसे स्थापित करने के लिए केवल दस्तावेज के माध्यम से पढ़ने में थोड़ा समय लगा ।
C # के बारे में महान बात यह है कि यह जावा डेवलपर्स के वर्षों से पहले पीटे गए मार्ग का अनुसरण कर रहा है। इसलिए, मेरी सलाह, आम तौर पर इस प्रकृति के साधनों की तलाश करते हुए बोलना, ठोस जावा उत्तर की तलाश करना और यह देखना है कि क्या अभी तक .NET अनुकूलन मौजूद है।
तो जब यह DI की बात आती है (और वहाँ बहुत सारे विकल्प हैं, तो यह वास्तव में स्वाद की बात है) Spring.NET है । इसके अतिरिक्त, परियोजनाओं के पीछे के लोगों पर शोध करना हमेशा बुद्धिमान होता है। मेरे पास सोर्स कंट्रोल के लिए सोर्सगियर उत्पादों (उन्हें इस्तेमाल करने के बाहर) का सुझाव देने का कोई मुद्दा नहीं है क्योंकि मेरे पास एरिक सिंक के लिए सम्मान है। मैंने मार्क पोलाक को बोलते देखा है और मैं क्या कह सकता हूं, आदमी बस इसे प्राप्त करता है।
अंत में, बहुत सारे डीआई फ्रेमवर्क हैं और आपका सबसे अच्छा शर्त यह है कि उनमें से कुछ के साथ कुछ नमूना परियोजनाएं करें और एक शिक्षित विकल्प बनाएं।
सौभाग्य!
मुझे लगता है कि शुरू करने के लिए एक अच्छी जगह निनजेक्ट के साथ है, यह नया है और ठीक ट्यूनिंग के लिए बहुत ध्यान रखा गया है और वास्तव में तेज है। डेवलपर, नैट, के पास वास्तव में एक महान साइट और महान समर्थन है।
स्प्रिंग.नेट काफी ठोस है, लेकिन प्रलेखन को कुछ समय के लिए मिटना पड़ा। Autofac अच्छा है, और जबकि .Net 2.0 समर्थित है, आपको इसे संकलित करने के लिए VS 2008 की आवश्यकता है, या फिर अपने ऐप को बनाने के लिए कमांड लाइन का उपयोग करें।