Devo fare qualcosa del genere? Sto pensando a tutti i miei controller che ereditano da BaseController
. Questo rompe il modello di design di IoC? Cos'altro dovrei fare invece?Controller MVC IoC e ASP.NET
risposta
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.
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.
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).
- 1. ASP.NET MVC + fluente nNibernato, quale strumento IoC?
- 2. IoC e ASP.NET MVC, da dove inizia tutto?
- 3. asp.net mvc controller generico
- 4. Autorizzazione personalizzata MVC 3 e Ninject IoC
- 5. Come integrare il provider di appartenenze IoC con ASP.NET MVC
- 6. ASP.Net MVC Controller Namespace array
- 7. ASP.NET MVC 3 _Layout.cshtml Controller
- 8. ASP.NET MVC controller azioni design
- 9. Fabbrica controller ASP.NET MVC 6
- 10. ASP.NET MVC Controller aggiungendo disabilitato
- 11. ASP.NET MVC - Respository/Service/Controller
- 12. Controller asincrono in ASP.NET MVC
- 13. ASP.NET MVC Autentica prima del controller istanziato
- 14. I buoni framework IOC da utilizzare con asp.net mvc?
- 15. Contenitore IoC .NET per mid-size ASP.NET MVC
- 16. ASP.Net MVC - Perché viene creato un controller per favicon.ico?
- 17. Qual è la differenza tra MVC Controller e Web API Controller in ASP.NET MVC 6?
- 18. ASP.Net MVC: invio JSON al controller
- 19. pass dizionario per controller asp.net mvc
- 20. ASP.NET MVC Controller Ciclo di vita
- 21. Passing informazioni tra controller in ASP.Net MVC-
- 22. Gestione delle eccezioni nel controller (ASP.NET MVC)
- 23. modifica convenzione nome controller in ASP.NET MVC
- 24. Deserializzare oggetti JSON in controller MVC Asp.Net
- 25. ASP.NET MVC 4 controller asincrono richiamata
- 26. Test controller unità ASP.NET MVC con HttpContext
- 27. Impersonificazione: ASP.Net MVC Controller Azione e moduli Web
- 28. ASP.NET MVC C# Ottieni controller e nome dell'azione nella classe
- 29. ASP.Net MVC 3 Azione controller e Apri nuova finestra
- 30. Instradamento con e senza nome controller in ASP.NET MVC 4
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
Sto effettivamente usando Castle Windsor ma con un set di interfacce wrapper per nascondere la sua complessità/dipendenza –
Grazie per il tuo aiuto! –