Quali framework di Iniezione di dipendenze NET # C. / Vale la pena esaminare? E cosa puoi dire della loro complessità e velocità.
Quali framework di Iniezione di dipendenze NET # C. / Vale la pena esaminare? E cosa puoi dire della loro complessità e velocità.
Risposte:
modifica (non dell'autore): è disponibile un elenco completo di framework IoC su https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :
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 .
Dipende da cosa stai cercando, poiché ognuno ha i suoi pro e contro.
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.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.Structure Map
ha una configurazione molto ricca e a grana fine attraverso un DSL interno.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.Ninject
Ho sentito che è più ossa nude con un approccio meno è più (sentito non sperimentato).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.
Autofac. https://github.com/autofac/Autofac È veramente veloce e abbastanza buono. Ecco un link con i confronti (creato dopo che Ninject ha risolto un problema di perdita di memoria).
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
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.
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.
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.
Posso consigliare Ninject. È incredibilmente veloce e facile da usare ma solo se non hai bisogno della configurazione XML, altrimenti dovresti usare Windsor.
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.
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.
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!
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.
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.