Domanda

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

È stato utile?

Soluzione

modificare (non dell'autore):È disponibile un elenco completo dei framework IoC all'indirizzo https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc:

  • Castello Windsor - Castle Windsor è il migliore contenitore di Inversione di controllo maturo disponibile per .NET e Silverlight
  • Unità - Contenitore leggero ed estensibile per l'inserimento di dipendenze con supporto per l'inserimento di chiamate di costruttore, proprietà e metodo
  • Autofac - Un avvincente contenitore .NET IoC
  • DryIoc - Contenitore IoC semplice, veloce e completo di tutte le funzionalità.
  • Non iniettare - Il ninja degli iniettori di dipendenza .NET
  • Mappa della struttura - Il contenitore IoC/DI originale per .Net
  • Spring.Net - Spring.NET è un framework applicativo open source che semplifica la creazione di applicazioni .NET aziendali
  • LightInject - Un contenitore IoC ultraleggero
  • Iniettore semplice - Simple Injector è una libreria Dependency Injection (DI) di facile utilizzo per .NET 4+ che supporta Silverlight 4+, Windows Phone 8, Windows 8 incluse le app universali e Mono.
  • Microsoft.Extensions.DependencyInjection -Il contenitore IoC predefinito per le applicazioni ASP.NET Core.
  • Scrutatore - Estensioni di scansione degli assembly per Microsoft.Extensions.DependencyInjection.
  • CONTRO IL MEF - Implementazione Managed Extensibility Framework (MEF) utilizzata da Visual Studio.
  • TinyIoC - Un contenitore di inversione del controllo facile da usare e senza problemi per piccoli progetti, biblioteche 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, ma non richiede, un framework IoC (Inversion of Control).I framework IoC rendono il DI molto più semplice e forniscono una serie di altri vantaggi oltre al DI.

Detto questo, sono sicuro che è quello che stavi chiedendo.Informazioni sui framework IoC;usavo Spring.Net E Castello di Windsor molto, ma la vera seccatura era tutta quella fastidiosa configurazione XML che dovevi scrivere!Si stanno muovendo praticamente tutti in questa direzione adesso, quindi li sto usando Mappa della struttura nell'ultimo anno circa, e da quando sono passato a una configurazione fluida utilizzando generici fortemente tipizzati e un registro, la mia barriera del dolore nell'utilizzo di IoC è scesa sotto lo zero!Sono assolutamente entusiasta di sapere ora che la mia configurazione IoC viene controllata 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 fossero lenti in fase di esecuzione, ma per me erano più difficili da configurare e la frustrazione spesso aveva la meglio.

Aggiornamento

Sto usando Non iniettare 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 ottenuto tutto ciò di cui avevo bisogno da a fantastico set di screencast di Ninject di Justin Etheredge.Non vedo affatto che l'adattamento di Ninject al codice esistente sia un problema, ma si potrebbe dire lo stesso Mappa della struttura nella mia esperienza.Sarà una scelta difficile andare avanti tra questi due, ma preferirei la competizione piuttosto che la stagnazione e c'è una discreta quantità di sana concorrenza là fuori.

È possibile trovare anche altri screencast IoC qui su Dimecasts.

Altri suggerimenti

Dipende da cosa stai cercando, ognuno di essi ha i suoi pro e i suoi contro.

  1. Spring.NET è il più maturo in quanto esce in 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 l'ecosistema più grande, è altamente configurabile/estensibile, ha una gestione della durata personalizzata, supporto AOP, ha il supporto NHibernate intrinseco ed è un contenitore fantastico a tutto tondo.Windsor fa parte di un intero stack che include Monorail, Active Record, ecc.Lo stesso Hibernate si basa su Windsor.
  3. Structure Map ha una configurazione molto ricca e a grana fine tramite una DSL interna.
  4. Autofac è un contenitore IoC della nuova era con tutto il supporto di programmazione funzionale intrinseco.Adotta inoltre un approccio diverso alla gestione della vita rispetto agli altri.Autofac è ancora molto nuovo, ma sposta l'asticella su ciò che è possibile fare con IoC.
  5. Ninject Ho sentito dire che è più semplice con un approccio meno è più (sentito non esperto).
  6. Il più grande discriminatore di Unity È:proviene e è supportato da Microsoft (p&p).Unity ha ottime prestazioni e un'ottima documentazione.È anche altamente configurabile.Non ha tutti i fronzoli della mappa del castello/della struttura.

Quindi, in sintesi, dipende davvero da cosa è importante per te.Sarei d'accordo con gli altri sull'andare a valutare e vedere quale si adatta.La cosa bella è che hai una buona selezione di ciambelle invece di doverne avere solo una gelatina.

Autofac. https://github.com/autofac/Autofac È davvero veloce e abbastanza buono.Ecco un collegamento con i confronti (effettuato 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 davvero veloce, ma non ho fatto confronti.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.Questi, nella mia mente, sono i tre grandi da considerare in questo momento.

Io uso Iniettore semplice:

Simple Injector è una libreria di iniezione delle dipendenze semplice, flessibile e veloce che utilizza le migliori pratiche per guidare le tue soluzioni verso l'abisso del successo.

Sono un grande fan di Castle.Adoro le strutture che offre anche oltre la storia del contenitore IoC.Semplifica davvero l'utilizzo di NHibernate, logging, AOP, ecc.anch'io uso Binsor per la configurazione con Boo e per questo mi sono davvero innamorato di Boo come linguaggio.

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 lottando senza successo per far funzionare l'esempio Spring.NET più semplice.Non sono mai riuscito a capire come trovare il mio assembly dal file XML.In circa 2 ore, invece, sono riuscito a far funzionare Ninject, incluso il test dell'integrazione sia con NUnit che con MSTest.

ho usato Primavera.NET in passato e ha avuto un grande successo con esso.Non ho mai notato alcun sovraccarico sostanziale, anche se il progetto su cui l'abbiamo utilizzato era abbastanza pesante di per sé.Ci è voluto solo un po' di tempo per leggere il file documentazione per impostarlo.

La cosa bella 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 questa natura, è di cercare la solida risposta Java e vedere se esiste già un adattamento .NET.

Quindi, quando si tratta di DI (e ci sono così tante opzioni là fuori, è davvero una questione di gusti) lo è Primavera.NET.Inoltre, è sempre saggio ricercare le persone dietro i progetti.Non ho problemi a suggerire i prodotti SourceGear per il controllo del codice sorgente (a parte usarli) perché rispetto Eric Sink.Ho visto parlare Mark Pollack e cosa posso dire, il ragazzo ha capito e basta.

Alla fine, ci sono molti framework DI e la soluzione migliore è realizzare alcuni progetti di esempio con alcuni di essi e fare una scelta consapevole.

Buona fortuna!

Penso che un buon punto di partenza sia Ninject, è nuovo e ha tenuto conto di molti aggiustamenti ed è davvero veloce.Nate, lo sviluppatore, ha davvero un ottimo sito e un ottimo supporto.

Spring.Net è abbastanza solido, ma la documentazione ha richiesto del tempo per essere esaminata.Autofac è buono e, sebbene .Net 2.0 sia supportato, è necessario VS 2008 per compilarlo, oppure utilizzare la riga di comando per creare la tua app.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top