2009-06-05 25 views

risposta

10

Sarebbe molto più semplice andare con l'iniezione del costruttore e fare in modo che un controllerfactory lo inietti per voi. Se è possibile, non utilizzare un localizzatore di servizi (il tuo ServiceResolver) se riesci a farla franca con l'iniezione del costruttore.

C'è un po 'di informazioni su di esso su Adding a controller factory to ASP MVC

Il collegamento mostra come farlo con StructureMap e sembra che si sta utilizzando Unity, ma dovrebbe essere semplice da adattarsi.

+1

Sono d'accordo. Dovresti usare solo il tuo resolver di tipo nella radice della tua applicazione. Se per nessun altro motivo se hai bisogno di cambiare gli iniettori non devi cambiare tutto il tuo codice, solo il punto in cui il tuo primo oggetto. Nella mia applicazione l'unico posto che conosce l'iniettore è Global.asax, e anche lì sto usando in 1 troppi punti (cioè, lo sto usando in 2 punti). Con l'iniezione del costruttore tutto va a posto e il tuo oggetto è isolato da tutto – Talljoe

+0

Sto effettivamente usando Castle Windsor ma con un set di interfacce wrapper per nascondere la sua complessità/dipendenza –

+0

Grazie per il tuo aiuto! –

0

Suppongo che le interfacce protette siano dipendenze per il controller. È possibile configurare un contenitore IoC per iniettare le dipendenze per te. Può certamente essere fatto con Castle Windsor. Dovresti modificare la classe BaseController per avere un costruttore con le dipendenze richieste, purché il contenitore IoC sia a conoscenza degli altri servizi che sarà in grado di iniettarli.

0

Uno dei principi alla base Inversion of Control e Component-Driven Development è circa con localizzatori di servizio statico solo quando non c'è altro modo (cioè .: in host servizio Web o fonti di dati oggetto).

Tecnicamente parlando, utilizzando i localizzatori di servizio statici il controller di base non viola IoC, semplicemente non lo usa.

Verificare existing integration tra il contenitore IoC Autofac e ASP.NET MVC (anche altri contenitori dovrebbero essere in grado di farlo).

Problemi correlati