Quali framework di .NET Dependency Injection vale la pena esaminare? [chiuso]


386

Quali framework di Iniezione di dipendenze NET # C. / Vale la pena esaminare? E cosa puoi dire della loro complessità e velocità.


13
Benchmark del contenitore IoC: il confronto delle prestazioni presenta tabelle di confronto delle prestazioni e delle caratteristiche per oltre 20 prodotti e li mantiene aggiornati. Raccomanda Simple Injector
Michael Freidgeim del

Apprezzo Ninject e Maestro. Sono contento che la risposta più votata faccia riferimento a Ninject come "un piacere assoluto"
Razvan Dumitru,

6
Sottolineo che prima di guardare nei contenitori IoC, dovresti farne a meno. Effettua il cablaggio e l'iniezione manualmente, non è davvero complicato o richiede molto codice a meno che tu non abbia alcuni sistemi davvero complessi o di grandi dimensioni. Quando sentirai di averlo capito e che diventerà più complesso, sarai più adatto a capire quale tipo di quadro ti aiuterà. ma non esiste una regola che dica che un progetto DEVE avere un contenitore IoC solo per essere in grado di eseguire correttamente DI.
Sara

1
Inizia con nessuno. Creare manualmente il grafico degli oggetti richiesti. Framework diversi hanno approcci diversi che dipendono dalle tue esigenze. Prima di sceglierne uno devi riconoscere quali funzionalità ti servono di più.
Fabio,

Poiché dotnetcore è il futuro, potresti anche rimanere fedele al supporto DI integrato. È molto buono e altamente personalizzabile.
ATL_DEV,

Risposte:


340

modifica (non dell'autore): è disponibile un elenco completo di framework IoC su https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :

  • Castle Windsor - Castle Windsor è il contenitore di inversione di controllo migliore e maturo disponibile per .NET e Silverlight
  • Unity : contenitore di iniezione di dipendenza estensibile leggero con supporto per l'iniezione di chiamate di costruttori, proprietà e metodi
  • Autofac - Un avvincente contenitore .NET IoC
  • DryIoc - Contenitore IoC completo , semplice e veloce.
  • Ninject - Il ninja degli iniettori di dipendenza .NET
  • StructureMap - Il contenitore IoC / DI originale per .Net
  • Spring.Net - Spring.NET è un framework di applicazioni open source che semplifica la creazione di applicazioni .NET aziendali
  • LightInject - Un contenitore IoC ultra leggero
  • Simple Injector - Simple Injector è una libreria DI (Dependency Injection) facile da usare per .NET 4+ che supporta Silverlight 4+, Windows Phone 8, Windows 8 comprese le app Universal e Mono.
  • Microsoft.Extensions.DependencyInjection : il contenitore IoC predefinito per le applicazioni ASP.NET Core.
  • Scrutor : estensioni per la scansione degli assiemi per Microsoft.Extensions.DependencyInjection.
  • VS MEF - Implementazione Managed Extensibility Framework (MEF) utilizzata da Visual Studio.
  • TinyIoC - Inversion of Control Container facile da usare, senza problemi per piccoli progetti, librerie e principianti.

Segue la risposta originale.


Suppongo che potrei essere un po 'esigente qui, ma è importante notare che DI (Dependency Injection) è un modello di programmazione ed è facilitato da, ma non richiede, un framework IoC (Inversion of Control). I framework IoC rendono semplicemente DI molto più semplice e offrono una serie di altri vantaggi oltre a DI.

Detto questo, sono sicuro che è quello che stavi chiedendo. Informazioni sui framework IoC; Ho usato per usare Spring.Net e CastleWindsor molto, ma il vero dolore nel sedere era tutto quel fastidioso configurazione XML si doveva scrivere! Ora si stanno praticamente muovendo tutti in questo modo, quindi ho usato StructureMap nell'ultimo anno o giù di lì, e da quando è passato a una configurazione fluida usando generici fortemente tipizzati e un registro, la mia barriera al dolore nell'uso di IoC è scesa a sotto zero! Mi viene un calcio assoluto dal sapere ora che la mia configurazione IoC è verificata in fase di compilazione (per la maggior parte) e non ho avuto altro che gioia con StructureMap e la sua velocità. Non dirò che gli altri erano lenti in fase di esecuzione, ma per me erano più difficili da configurare e la frustrazione spesso vinceva il giorno.

Aggiornare

Ho usato Ninject sul mio ultimo progetto ed è stato un vero piacere da usare. Le parole mi mancano un po 'qui, ma (come diciamo nel Regno Unito) questo quadro è "i cani". Lo consiglio vivamente per tutti i progetti di campi verdi in cui si desidera essere operativi rapidamente. Ho avuto tutto ciò di cui avevo bisogno da una fantastica serie di screencast Ninject di Justin Etheredge. Non riesco a vedere quel Ninject retro-adattato nel codice esistente come un problema, ma lo stesso si potrebbe dire di StructureMap nella mia esperienza. Sarà una scelta difficile andare avanti tra quei due, ma preferirei avere competizione piuttosto che stagnazione e c'è una discreta quantità di sana competizione là fuori.

Altri screencast IoC possono anche essere trovati qui su Dimecasts .


1
È bello vedere una risposta di qualità, ben ponderata, a proposito delle fodere. Mi hai convinto a dare un'occhiata a StructureMap.
Chris Marasti-Georg,

7
Bello ma per essere onesti - Windsor ha un'interfaccia fluida a tutti gli effetti anche adesso.
Krzysztof Kozmic,

Potresti spiegare quali sono i framework IoC "host of other benefit" oltre alla semplice implementazione di DI?
fearofawhackplanet,

@fearofawhackplanet una delle uniche cose che un contenitore IoC può fare che non può essere fatto con il DI di un uomo povero è l' Intercettazione . Buon riassunto qui: kenneth-truyers.net/2013/05/16/…
Mathieu Guindon

1
Ho letto un paio di fonti che dicono che Ninject è il più lento palmmedia.de/blog/2011/8/30/... e stackoverflow.com/questions/4581791/...
Luca T O'Brien

77

Dipende da cosa stai cercando, poiché ognuno ha i suoi pro e contro.

  1. Spring.NETè il più maturo in quanto viene fuori dalla primavera dal mondo Java. Spring ha un set molto ricco di librerie di framework che lo estendono per supportare Web, Windows, ecc.
  2. Castle Windsorè uno dei più utilizzati nella piattaforma .NET e ha il più grande ecosistema, è altamente configurabile / estensibile, ha una gestione della vita personalizzata, supporto AOP, supporto intrinseco NHibernate ed è un fantastico contenitore. Windsor fa parte di un intero stack che include monorotaia, Active Record, ecc. NHibernate stesso si basa su Windsor.
  3. Structure Map ha una configurazione molto ricca e a grana fine attraverso un DSL interno.
  4. Autofacè un contenitore IoC della nuova era con tutto il suo supporto di programmazione funzionale intrinseca. Adotta anche un approccio diverso nella gestione della vita rispetto agli altri. L'autofac è ancora molto nuovo, ma spinge la barra su ciò che è possibile con IoC.
  5. Ninject Ho sentito che è più ossa nude con un approccio meno è più (sentito non sperimentato).
  6. Il più grande discriminatore di Unityè: è di e supportato da Microsoft (p & p). Unity ha prestazioni molto buone e un'ottima documentazione. È anche altamente configurabile. Non ha tutte le campane e fischietti della mappa Castello / Struttura.

Quindi, in sintesi, dipende davvero da ciò che è importante per te. Concordo con gli altri sull'andare, valutare e vedere quale si adatta. La cosa bella è che hai una buona selezione di ciambelle piuttosto che doverne avere una gelatina.


4
L'autofac non è in realtà così nuovo, è più vecchio di Unity :)
Nicholas Blumhardt,

1
Ho detto che era più recente di Unity? Ho detto che è della nuova era ... cioè intendevo che è una natura funzionale. OK, quello che ho detto è ancora molto nuovo, quello che volevo dire era che non era che l'IT fosse nuovo. :-)
Glenn Block,

2
@Krzysztof - Trovo che Unity sia facile (almeno se configurato correttamente nel codice). Cosa hai trovato doloroso?
TrueWill,


6
Ecco un interessante benchmark delle prestazioni: palmmedia.de/Blog/2011/8/30/…
Steven


18

Ninject è fantastico. Sembra molto veloce, ma non ho fatto paragoni. So che Nate, l'autore, ha fatto alcuni confronti tra Ninject e altri framework DI e sta cercando altri modi per migliorare la velocità di Ninject.

Ho sentito molte persone che rispetto dire cose positive su StructureMap e CastleWindsor. Quelli, secondo me, sono i tre grandi da guardare in questo momento.


1
Ninject è popolare ma sicuramente NON è veloce. In realtà è uno dei più lenti in circolazione
Serj Sagan

13

Uso Simple Injector :

Simple Injector è una libreria di iniezione di dipendenza facile, flessibile e rapida che utilizza le migliori pratiche per guidare le tue soluzioni verso il successo.


4
Attenzione alcuni considerano il localizzatore di servizi un anti-schema, incluso qualcuno che lo ha usato per un po 'di tempo e ha persino scritto una libreria per esso: blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern
Philippe

4
Steven è anche il creatore di Simple Injector ... quindi questa è una specie di risposta spammy ... soprattutto che ha usato un account alt per farlo ... Simple Injector è piuttosto veloce però: palmmedia.de/Blog/2011/ 8/30 /…
Serj Sagan

8

Sono un grande fan di Castle. Adoro le strutture che offre anche oltre la storia del contenitore IoC. Semplifica davvero usando NHibernate, logging, AOP, ecc. Uso anche Binsor per la configurazione con Boo e mi sono davvero innamorato di Boo come lingua per questo.



5

Ho trascorso gran parte della giornata a lottare senza successo per far funzionare l'esempio Spring.NET più semplice. Non sono mai riuscito a capire come ottenerlo per trovare il mio assembly dal file XML. In circa 2 ore, invece, sono stato in grado di far funzionare Ninject, incluso il test dell'integrazione con NUnit e MSTest.


4

Ho usato Spring.NET in passato e ho avuto un grande successo. Non ho mai notato alcun sovraccarico sostanziale con esso, sebbene il progetto su cui l'abbiamo usato fosse abbastanza pesante da solo. Ci è voluto solo un po 'di tempo per leggere la documentazione per installarla.


2

La cosa grandiosa di C # è che sta seguendo un percorso battuto da anni di sviluppatori Java prima di esso. Quindi, il mio consiglio, in generale quando si cercano strumenti di questo tipo, è quello di cercare la solida risposta Java e vedere se esiste ancora un adattamento .NET.

Quindi, quando si tratta di DI (e ci sono così tante opzioni là fuori, questa è davvero una questione di gusti) è Spring.NET . Inoltre, è sempre consigliabile ricercare le persone dietro i progetti. Non ho alcun problema a suggerire prodotti SourceGear per il controllo del codice sorgente (al di fuori del loro utilizzo) perché ho rispetto per Eric Sink. Ho visto Mark Pollack parlare e cosa posso dire, il ragazzo lo capisce e basta.

Alla fine, ci sono molti framework DI e la tua scommessa migliore è fare alcuni progetti di esempio con alcuni di essi e fare una scelta istruita.

In bocca al lupo!


2

Penso che un buon punto di partenza sia con Ninject, è nuovo e ha tenuto conto di una buona messa a punto ed è davvero veloce. Nate, lo sviluppatore, ha davvero un ottimo sito e un ottimo supporto.


Perché stai dicendo che è veloce ??? È uno dei più lenti che ci siano! palmmedia.de/Blog/2011/8/30/…
Serj Sagan

2

Spring.Net è piuttosto solido, ma la documentazione ha impiegato del tempo per essere superata. Autofac è buono e mentre .Net 2.0 è supportato, è necessario VS 2008 per compilarlo, oppure utilizzare la riga di comando per compilare la tua app.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.