कौन से .NET डिपेंडेंसी इंजेक्शन फ्रेमवर्क देखने लायक हैं? [बन्द है]


386

कौन सी C # /। NET डिपेंडेंसी इंजेक्शन फ्रेमवर्क देखने लायक हैं? और आप उनकी जटिलता और गति के बारे में क्या कह सकते हैं।


13
IoC कंटेनर बेंचमार्क - प्रदर्शन तुलना में प्रदर्शन और 20+ उत्पादों के लिए तुलना तालिकाओं की विशेषताएं हैं और उन्हें अद्यतित रखती हैं। यह सरल इंजेक्टर
माइकल फ्रीजिम

मैं Ninject और Maestro की सराहना करता हूं। मुझे खुशी है कि टॉप रेटेड उत्तर निफ़्जे को "पूर्ण आनंद" के रूप में दोहराता है
रज़वान डुमित्रु

6
मैं जोर देता हूं कि इससे पहले कि आप आईओसी कंटेनर में देखें, आपको एक के बिना प्रबंधन करना चाहिए। अपने वायरिंग और इंजेक्शन को मैन्युअल रूप से करें, यह वास्तव में जटिल नहीं है या बहुत सारे कोड की आवश्यकता नहीं है जब तक कि आपके पास वास्तव में कुछ जटिल या बड़े सिस्टम न हों। जब आपको लगता है कि आप इसे समझ गए हैं और यह हास्य बन रहा है तो आपको यह समझने में बेहतर होगा कि किस तरह की रूपरेखा आपकी मदद करती है। लेकिन ऐसा कोई नियम नहीं है जो कहता है कि एक परियोजना के लिए एक आईओसी कंटेनर होना चाहिए जो डीआई को ठीक से करने में सक्षम हो।
सारा

1
किसी के साथ शुरू करो। मैन्युअल रूप से आवश्यक ऑब्जेक्ट ग्राफ़ बनाएं। विभिन्न रूपरेखाओं में अलग-अलग दृष्टिकोण होते हैं जो आपकी आवश्यकताओं पर निर्भर करता है। किसी को चुनने से पहले आपको यह पहचानना होगा कि आपको किन विशेषताओं की आवश्यकता है।
फेबियो

चूंकि डॉटनेटकोर भविष्य है, आप इसके साथ ही डीआई समर्थन में निर्मित हो सकते हैं। यह बहुत अच्छा और उच्च अनुकूलन योग्य है।
ATL_DEV

जवाबों:


339

संपादित करें (लेखक द्वारा नहीं): https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc पर IoC फ्रेमवर्क की एक व्यापक सूची उपलब्ध है :

  • कैसल विंडसर - कैसल विंडसर नस्ल, .NET और सिल्वरलाइट के लिए उपलब्ध कंट्रोल कंटेनर का परिपक्व उलटा सबसे अच्छा है
  • एकता - कंस्ट्रक्टर, संपत्ति और विधि कॉल इंजेक्शन के समर्थन के साथ हल्के एक्स्टेंसिबल निर्भरता इंजेक्शन कंटेनर
  • ऑटोफेक - एक नशे की लत .NET IoC कंटेनर
  • ड्रायोक - सरल, तेज सभी पूरी तरह से चित्रित आईओसी कंटेनर।
  • Ninject - .NET निर्भरता इंजेक्टर के निंजा
  • संरचना -मूल - .NET के लिए मूल IoC / DI कंटेनर
  • Spring.Net - Spring.NET एक ओपन सोर्स एप्लिकेशन फ्रेमवर्क है, जो एंटरप्राइज़ .NET बिल्डिंग को आसान बनाता है
  • लाइटइन्जेक्ट - एक अल्ट्रा लाइटवेट IoC कंटेनर
  • Simple Injector - Simple Injector .NET 4+ के लिए एक आसानी से उपयोग की जाने वाली निर्भरता इंजेक्शन (DI) लाइब्रेरी है जो यूनिवर्सल ऐप्स और मोनो सहित सिल्वरलाइट 4+, विंडोज फोन 8, विंडोज 8 का समर्थन करता है।
  • Microsoft.Extensions.D dependencyInjection - ASP.NET कोर अनुप्रयोगों के लिए डिफ़ॉल्ट IoC कंटेनर।
  • स्क्रूटोर - Microsoft के लिए असेंबली स्कैनिंग एक्सटेंशन।
  • वीएस एमईएफ - विजुअल स्टूडियो द्वारा उपयोग किए गए एक्स्टेंसिबिलिटी फ्रेमवर्क (एमईएफ) कार्यान्वयन।
  • TinyIoC - छोटी परियोजनाओं, पुस्तकालयों और शुरुआती के लिए एक आसान उपयोग, परेशानी मुक्त, नियंत्रण कंटेनर का उलटा।

मूल उत्तर इस प्रकार है।


मुझे लगता है कि मैं यहाँ थोड़ा अचार हो रहा हूँ, लेकिन यह ध्यान रखना महत्वपूर्ण है कि DI (निर्भरता इंजेक्शन) एक प्रोग्रामिंग पैटर्न है और इसकी सुविधा है, लेकिन इसके लिए IoC (नियंत्रण का उलटा) की आवश्यकता नहीं है। IoC चौखटे सिर्फ DI को बहुत आसान बनाते हैं और वे DI के ऊपर और ऊपर अन्य लाभों की मेजबानी प्रदान करते हैं।

कहा जा रहा है, मुझे यकीन है कि आप क्या पूछ रहे थे। आईओसी फ्रेमवर्क के बारे में; मैंने Spring.Net और CastleWindsor का बहुत उपयोग किया , लेकिन इसके पीछे असली दर्द यह था कि pesky XML config को आपको लिखना था! वे अब इस तरह से आगे बढ़ रहे हैं, इसलिए मैं पिछले एक या दो साल से स्ट्रक्चर्डपाइप का उपयोग कर रहा हूं , और चूंकि यह धाराप्रवाह टाइपिक्स और रजिस्ट्री का उपयोग करके एक धाराप्रवाह विन्यास में चला गया है, इसलिए आईओसी का उपयोग करने में मेरा दर्द अवरोधक में गिर गया है शून्य से नीचे! मुझे अब यह जानने से एक पूर्ण किक मिलती है कि मेरे IoC कॉन्फ़िगरेशन को संकलन-समय (सबसे अधिक भाग के लिए) पर चेक किया गया है और मेरे पास स्ट्रक्चरप्योर और इसकी गति के साथ आनंद के अलावा कुछ भी नहीं है। मैं यह नहीं कहूंगा कि अन्य लोग रनटाइम में धीमे थे, लेकिन वे मेरे लिए सेटअप करने में अधिक कठिन थे और निराशा ने अक्सर दिन जीता।

अपडेट करें

मैं अपने नवीनतम प्रोजेक्ट पर Ninject का उपयोग कर रहा हूं और इसका उपयोग करने का एक परम आनंद रहा है। शब्द मुझे यहां थोड़ा विफल करते हैं, लेकिन (जैसा कि हम ब्रिटेन में कहते हैं) यह ढांचा 'डॉग्स' है। मैं किसी भी हरे क्षेत्र की परियोजनाओं के लिए इसकी अत्यधिक अनुशंसा करूंगा जहां आप जल्दी से जल्दी चलना चाहते हैं। मुझे जस्टिन एथरेज द्वारा निनजेक्ट स्क्रैंकोस्ट के शानदार सेट से ज़रूरत थी। मैं उस रेट्रो-फिटिंग निनजेक्ट को मौजूदा कोड में बिल्कुल भी समस्या नहीं देख सकता, लेकिन फिर मेरे अनुभव में स्ट्रक्चरुरैप के बारे में भी यही कहा जा सकता है । यह उन दोनों के बीच आगे बढ़ने वाला एक कठिन विकल्प होगा, लेकिन मैं ठहराव की तुलना में प्रतिस्पर्धा करना चाहता हूं और वहां स्वस्थ प्रतिस्पर्धा का एक अच्छा हिस्सा है।

अन्य आईओसी स्क्रैनास्ट भी डिमास्टॉक्स पर यहां देखे जा सकते हैं ।


1
यह एक गुणवत्ता को देखने के लिए बहुत अच्छा है, एक लाइनर के बारे में अच्छी तरह से सोचा उत्तर वृद्धि। आपने मुझे स्ट्रक्चरपुराप की जाँच करने के लिए मना लिया।
क्रिस मैराती-जॉर्ज

7
अच्छा है, लेकिन निष्पक्ष होने के लिए - विंडसर के पास अब बहुत अच्छा पूर्ण रूप से धाराप्रवाह इंटरफ़ेस है।
Krzysztof Kozmic

क्या आप बता सकते हैं कि "अन्य लाभों के मेजबान" आईओसी फ्रेमवर्क डीआई के आसान कार्यान्वयन के अलावा क्या प्रदान करते हैं?
डरफॉव्हकप्लेनेट

@fearofawhackplanet एक ही चीज़ों में से एक IoC कंटेनर है जो गरीब आदमी के DI के साथ नहीं किया जा सकता है अवरोधन । यहाँ अच्छा सारांश: kenneth-truyers.net/2013/05/16/…
मैथ्यू

1
मैंने कुछ सूत्रों को पढ़ा है जो कहते हैं कि निन्यूज सबसे धीमा हथेली है ।de/blog/2011
ल्यूक टी ओ'ब्रायन

77

यह इस बात पर निर्भर करता है कि आप क्या देख रहे हैं, क्योंकि वे प्रत्येक के पास अपने पेशेवरों और विपक्ष हैं।

  1. Spring.NETयह जावा दुनिया से वसंत से बाहर आने के रूप में सबसे अधिक परिपक्व है। स्प्रिंग में फ्रेमवर्क लाइब्रेरी का बहुत समृद्ध सेट है जो इसे वेब, विंडोज आदि का समर्थन करने के लिए विस्तारित करता है।
  2. Castle Windsor.NET प्लेटफ़ॉर्म में सबसे व्यापक रूप से उपयोग किया जाता है और इसमें सबसे बड़ा पारिस्थितिकी तंत्र है, अत्यधिक विन्यास योग्य / एक्स्टेंसिबल है, इसमें कस्टम लाइफटाइम प्रबंधन है, AOP समर्थन है, इसमें निहित NHibernate समर्थन है और यह सभी भयानक कंटेनर के आसपास है। विंडसर एक पूरे स्टैक का हिस्सा है जिसमें मोनोरेल, एक्टिव रिकॉर्ड आदि शामिल हैं, एनएचबर्नेट स्वयं विंडसर के शीर्ष पर बनाता है।
  3. Structure Map एक आंतरिक DSL के माध्यम से बहुत समृद्ध और महीन दानेदार विन्यास है।
  4. Autofacयह नए युग का एक IoC कंटेनर है, जिसमें निहित कार्यात्मक प्रोग्रामिंग समर्थन है। यह दूसरों की तुलना में जीवनकाल के प्रबंधन पर एक अलग दृष्टिकोण रखता है। ऑटोफेक अभी भी बहुत नया है, लेकिन यह आईओसी के साथ क्या संभव है पर पट्टी को धक्का देता है।
  5. Ninject मैंने सुना है कि एक कम दृष्टिकोण के साथ अधिक नंगे हड्डियां हैं (सुना नहीं अनुभवी)।
  6. का सबसे बड़ा विवेचक Unityहै: यह Microsoft (p & p) द्वारा समर्थित और समर्थित है। एकता के पास बहुत अच्छा प्रदर्शन है, और महान दस्तावेज हैं। यह अत्यधिक विन्यास योग्य भी है। इसमें कैसल / स्ट्रक्चर मैप के सभी घंटियाँ और सीटी नहीं हैं।

इसलिए संक्षेप में, यह वास्तव में इस बात पर निर्भर करता है कि आपके लिए क्या महत्वपूर्ण है। मैं अन्य लोगों के साथ जाने और मूल्यांकन करने और देखने पर सहमत होता हूं कि कौन फिट बैठता है। अच्छी बात यह है कि आपके पास सिर्फ एक जेली रखने के बजाय डोनट्स का एक अच्छा चयन है।


4
ऑटोफेक वास्तव में इतना नया नहीं है, यह यूनिटी से पुराना है :)
निकोलस ब्लमहार्ट

1
क्या मैंने कहा कि यह एकता की तुलना में नया था? मैंने कहा कि यह नए युग का है ... इसका मतलब है कि यह कार्यात्मक प्रकृति है। ठीक है, जो मैंने कहा वह अभी भी बहुत नया है, मेरा मतलब है कि हालांकि यह प्रकृति थी कि आईटी नया नहीं था। :-)
ग्लेन ब्लॉक

2
@Kzysztof - मुझे एकता मृत आसान लगती है (कम से कम जब कोड में धाराप्रवाह कॉन्फ़िगर किया जाता है)। आपको क्या दर्द हुआ?
ट्रूविल


6
यहाँ एक दिलचस्प प्रदर्शन बेंचमार्क है: palmmedia.de/Blog/2011/8/30/…
Steven

35

Autofac। https://github.com/autofac/Autofac यह वास्तव में तेज और बहुत अच्छा है। यहां तुलना के साथ एक लिंक दिया गया है (Ninject के बाद एक मेमोरी लीक मुद्दा तय किया गया है)।

http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html


मैं ऑटोफेक पसंद करता हूं लेकिन यह निश्चित रूप से तेज नहीं है। जैसा कि स्टीवन ऊपर लिंक किया गया है: palmmedia.de/Blog/2011/8/30/…
सगन

18

निन्यूज महान है। यह वास्तव में तेज़ लगता है, लेकिन मैंने कोई तुलना नहीं की है। मैं जानता हूँ कि नैट, लेखक, ने निन्जे और अन्य डीआई फ्रेमवर्क के बीच कुछ तुलना की थी और निन्जे की गति में सुधार के लिए और अधिक तरीकों की तलाश कर रहा है।

मैंने बहुत से ऐसे लोगों के बारे में सुना है जिनका मैं सम्मान करता हूं कि स्ट्रक्चरुरेशन और कैसल विंडसर के बारे में अच्छी बातें हैं। वे, मेरे दिमाग में, अभी देखने के लिए तीन बड़े हैं।


1
Ninject लोकप्रिय है लेकिन यह निश्चित रूप से तेज़ नहीं है। यह वास्तव में सबसे धीमे में से एक है: palmmedia.de/Blog/2011/8/30/…
Serj Sagan

13

मैं सरल इंजेक्टर का उपयोग करता हूं :

सरल इंजेक्टर एक आसान, लचीला और तेजी से निर्भरता इंजेक्शन लाइब्रेरी है जो सफलता के गड्ढे की ओर आपके समाधान का मार्गदर्शन करने के लिए सर्वोत्तम अभ्यास का उपयोग करता है।


4
कुछ लोग सेवा लोकेटर को एक एंटी-पैटर्न मानते हैं, जिसमें कोई ऐसा व्यक्ति भी शामिल है जिसने कुछ समय के लिए इसका इस्तेमाल किया और यहां तक ​​कि इसके लिए एक लाइब्रेरी भी लिखी: blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern
फिलिप

4
स्टीवन सिंपल इंजेक्टर के निर्माता भी हैं ... इसलिए यह एक प्रकार का अनचाहा जवाब है ... विशेष रूप से यह कि उन्होंने ऐसा करने के लिए एक ऑल्ट अकाउंट का उपयोग किया ... सिंपल इंजेक्टर हालांकि बहुत तेज़ है: palmmedia.de/Blog/2011/
8/30

8

मैं कैसल का बहुत बड़ा प्रशंसक हूं। मुझे यह सुविधा पसंद है कि यह IoC कंटेनर कहानी से परे भी प्रदान करता है। यह वास्तव में NHibernate, लॉगिंग, AOP, आदि का उपयोग करते हुए सरल करता है । मैं भी बू के साथ विन्यास के लिए बिनसर का उपयोग करता हूं और वास्तव में इसकी वजह से एक भाषा के रूप में बू के साथ प्यार हो गया है।


5

मैं Ninject की सिफारिश कर सकता हूँ। यह अविश्वसनीय रूप से तेज़ और उपयोग करने में आसान है, लेकिन केवल अगर आपको XML कॉन्फ़िगरेशन की आवश्यकता नहीं है, तो आपको विंडसर का उपयोग करना चाहिए।


1
यह तेज़ नहीं है! यह वहाँ से बाहर सबसे धीमी DI चौखटे में से एक है! palmmedia.de/Blog/2011/8/30/…
सर्ज

@ सरज सगन निष्पक्ष होने के लिए, वे परिणाम प्राचीन हैं (अब 6 साल पुराने)
टिमोथी कांसकी


5

मैंने एक दिन का बेहतर हिस्सा सफलता के बिना संघर्ष करते हुए बिताया है ताकि सबसे सरल स्प्रिंग.नेट का उदाहरण काम कर सके। एक्सएमएल फ़ाइल से मेरी असेंबली खोजने के लिए इसे प्राप्त करने का तरीका कभी पता नहीं लगा सका। लगभग 2 घंटे में, दूसरी ओर, मैं निन्यूज काम करने में सक्षम था, जिसमें NUnit और MSTest दोनों के साथ परीक्षण एकीकरण शामिल था।


4

मैंने पिछले समय में स्प्रिंगनेट का उपयोग किया है और इसके साथ बड़ी सफलता मिली है। मैंने कभी भी इसके साथ कोई भारी उपरिव्यय नहीं देखा, हालाँकि हमने जिस परियोजना का उपयोग किया था वह अपने आप में काफी भारी थी। इसे स्थापित करने के लिए केवल दस्तावेज के माध्यम से पढ़ने में थोड़ा समय लगा ।


2

C # के बारे में महान बात यह है कि यह जावा डेवलपर्स के वर्षों से पहले पीटे गए मार्ग का अनुसरण कर रहा है। इसलिए, मेरी सलाह, आम तौर पर इस प्रकृति के साधनों की तलाश करते हुए बोलना, ठोस जावा उत्तर की तलाश करना और यह देखना है कि क्या अभी तक .NET अनुकूलन मौजूद है।

तो जब यह DI की बात आती है (और वहाँ बहुत सारे विकल्प हैं, तो यह वास्तव में स्वाद की बात है) Spring.NET है । इसके अतिरिक्त, परियोजनाओं के पीछे के लोगों पर शोध करना हमेशा बुद्धिमान होता है। मेरे पास सोर्स कंट्रोल के लिए सोर्सगियर उत्पादों (उन्हें इस्तेमाल करने के बाहर) का सुझाव देने का कोई मुद्दा नहीं है क्योंकि मेरे पास एरिक सिंक के लिए सम्मान है। मैंने मार्क पोलाक को बोलते देखा है और मैं क्या कह सकता हूं, आदमी बस इसे प्राप्त करता है।

अंत में, बहुत सारे डीआई फ्रेमवर्क हैं और आपका सबसे अच्छा शर्त यह है कि उनमें से कुछ के साथ कुछ नमूना परियोजनाएं करें और एक शिक्षित विकल्प बनाएं।

सौभाग्य!


2

मुझे लगता है कि शुरू करने के लिए एक अच्छी जगह निनजेक्ट के साथ है, यह नया है और ठीक ट्यूनिंग के लिए बहुत ध्यान रखा गया है और वास्तव में तेज है। डेवलपर, नैट, के पास वास्तव में एक महान साइट और महान समर्थन है।


आप क्यों कह रहे हैं यह तेज़ है ??? यह सबसे धीमी गति से एक है! palmmedia.de/Blog/2011/8/30/…
सर्ज सगन

2

स्प्रिंग.नेट काफी ठोस है, लेकिन प्रलेखन को कुछ समय के लिए मिटना पड़ा। Autofac अच्छा है, और जबकि .Net 2.0 समर्थित है, आपको इसे संकलित करने के लिए VS 2008 की आवश्यकता है, या फिर अपने ऐप को बनाने के लिए कमांड लाइन का उपयोग करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.