2009-08-12 6 views
28

vedi anche Which C#/.NET Dependency Injection frameworks are worth looking into?Che cosa devo considerare quando si sceglie un quadro di iniezione di dipendenza per NET

Ora ci sono molti dependencyinjection quadri tra cui scegliere. Spesso si è costretti a utilizzare un dato framework di iniezione delle dipendenze a causa di una libreria che si stava utilizzando. Tuttavia, Common Service Locator library ha abilitato il codice della libreria per essere indipendente dai framework di iniezione.

Il tempo necessario per apprenderli tutti abbastanza bene da decidere quale usare è irragionevole. Non credo che abbiamo ancora raggiunto un punto in cui possiamo parlare della migliore struttura di iniezione delle dipendenze. Quindi quali domande dovrei porre riguardo al progetto e io stesso per aiutare a decidere sulla migliore struttura di iniezione delle dipendenze da utilizzare in un determinato caso?

Sarebbe anche utile sapere perché si sceglie il framework di iniezione delle dipendenze attualmente in uso e se si è ancora soddisfatti di tale scelta.

Esiste ancora un vocabolario utile da utilizzare quando si confrontano gli stili dei framework di dipendenza delle dipendenze?

La libreria Service Locator funziona nella vita reale o si è costretti a utilizzare molti framework di dipendenze diverse nello stesso progetto?

Quanto è facile rifrattore il codice con ogni Dipendenza Injection Framework, ad esempio strumenti come ReSharper funzionano bene con un dato framework?

risposta

15

Cordiali saluti, proprio questa mattina mi sono imbattuto in un interessante confronto tra tutti i contenitori .NET IoC qui:

http://elegantcode.com/2009/01/07/ioc-libraries-compared/

Una manciata di domande:

  1. Quanto supporto mainstream fare hai bisogno? La primavera è probabilmente la più grande là fuori. Tutti lo hanno usato o ne hanno già sentito parlare, quindi molte informazioni. Probabilmente ha anche il maggior numero di funzioni, ma ciò significa che c'è ancora molto da imparare. Un contenitore più piccolo come Autofac potrebbe essere carino, ma potresti trovare un problema su cui non troverai aiuto.
  2. Sei a portata di mano con la configurazione Xml? Ogni contenitore IoC si basa sulla configurazione e sull'impostazione di qualche tipo. Spring e Unity sono pesanti in Xml.
  3. È una scelta permanente? Se ti trovi in ​​uno di quei posti in cui hai una sola possibilità di scelta, non importa. Ma, se mai vorresti scegliere un'altra soluzione lungo la strada, probabilmente non vuoi un IoC che richiede di attribuire le tue classi (in qualche modo l'inverso della domanda precedente) perché ti odieresti quando devi strappare tutto quella roba fuori. In confronto, il wwapping di alcune configurazioni di xml potrebbe non essere così doloroso.
  4. Com'è il tuo negozio? Ho avuto problemi a lanciare un paio di opzioni open source solo per il "sussulto! Non è Microsoft!" Le reazioni. Se sei un negozio di MS dritto, usare Unity sarà una vittoria culturale molto più facile.

Su una nota personale:

Ho usato StructureMap per gli stessi motivi di cui il blog ho linkato.Penso che Xml config sia un enorme problema da mantenere e, soprattutto, il debug (vedi WCF). Non ho ancora provato Ninject, ma sulla base del loro marketing, deve essere super rad!

+2

ho avuto la risposta opposta a # 4, ho avuto il sussulto, "non è open source". – Chris

+3

Davvero? Wow, è fantastico. Ho combattuto quella battaglia per molto tempo. Non crederesti alle offerte subdole che dovevo fare per ottenere NHibernate qui ;-) –

+1

# 1 è una considerazione valida, ma la disponibilità di supporto non è sempre una funzione della dimensione della base utente, ed è talvolta l'opposto. Per esempio. per Autofac - abbiamo uno dei forum di utenti più reattivi e utili sulla rete :) Altre opzioni meno mainstream (ad esempio, Ninject) hanno anche un eccellente supporto. –

2

Penso che la scelta dipenda dal trovare una struttura che soddisfi le vostre esigenze e quindi le preferenze personali.

Il progetto utilizza già una libreria come strumenti di rinoceronte che si integra già con un framework DI? In tal caso, potrebbe essere un buon punto di partenza se si desidera evitare l'uso di "molti framework di dipendenze differenti".

Guarda anche questi due messaggi:

2

primavera e l'unità sono Xml pesanti.

Non sarei d'accordo con tale affermazione per Unità; puoi scrivere

container.RegisterType<IRobot, MrRoboto>(); 

e configurare il codice utilizzando un'interfaccia fluente. Personalmente mi piace Unity.

6

E 'difficile rispondere a cui quadro è 'meglio', ma posso dirvi che quadro è il più semplice: l'iniettore semplice:

L'iniettore semplice è un'inversione di facile uso della libreria di controllo per .NET e Silverlight. Esso supporta solo la configurazione basato su codice e è un punto di partenza ideale per gli sviluppatori non hanno familiarità con grandi librerie IOC/ DI

http://simpleinjector.codeplex.com/

spudorato btw ;-)