HTML.it logo
Learn
  • Design
    • Grafica
    • User Interface Design
    • Adobe Creative Suite
    Guide
    Approfondimenti
    Faq
    Notizie
    Tutto in Design >
  • Development
    • .NET
    • ASP
    • CMS
    • Flash
    • Java
    • JavaScript
    • PHP
    • Essentials
    • Ruby
    • XML
    • Editor
    • CSS
    • HTML
    Guide
    Approfondimenti
    Script
    Faq
    Notizie
    Tutto in Development >
  • Mobile
    • Android Studio
    • Cordova
    • Eclipse
    • Objective C
    • Swift
    Guide
    Approfondimenti
    Script
    Faq
    Notizie
    Tutto in Mobile >
  • Server
    • Cloud
    • Database
    • OS
    • Sicurezza
    • Network
    Tutto in Server >
  • Digital Marketing
    • SEO
    • Affiliate Marketing
    • Social Media Marketing
    Tutto in Digital Marketing >
  • Makers
    • Arduino
    • RaspberryPi
    • Stampa 3D
    Guide
    Approfondimenti
    Notizie
    Tutto in Makers >
  • Game Design
    • Unity
    Guide
    Approfondimenti
    Notizie
    Tutto in Game Design >
Download
  • Audio e Video
    • Player Audio Video
    • Codec audio
    • Montaggio
    • Masterizzazione
    • Ripper e Convertitori
    • Speech
    • Creatività
    • Ripresa
    • Riproduzione
    Tutto in Audio e Video >
  • Educazione
    • Bambini
    • Cartoni in Streaming
    • Cucina
    • Salute e Benessere
    • Didattica
    • Istruzione
    • Giochi Didattici
    Tutto in Educazione >
  • Videogame
    • Arcade
    • Avventura
    • Azione
    • Board
    • Carte
    • Giochi di ruolo
    • Giochi Online
    • Puzzle e Enigmistica
    • Simulazione
    • Sparatutto
    • Sport
    • Strategia e Giochi di Guerra
    • Tempo Libero
    Tutto in Videogame >
  • Grafica
    • Accessori & Mappe
    • Animazione
    • CAD – 3D
    • Cattura schermo
    • Convertitori e ridimensionatori
    • Editor
    • Flash
    • Font
    • Ritocco
    • Gallerie e album
    • Icone e loghi
    • Visualizzatori
    Tutto in Grafica >
  • Internet
    • Browser
    • Chat e IM
    • eMail
    • Estensioni & Temi
    • FTP
    • Network
    • News e RSS
    • Peer to Peer
    • Webcam
    Tutto in Internet >
  • Programmazione
    • Accessori
    • CMS e E-Commerce
    • Editor e Compilatori
    • Editor e strumenti Web
    • Linguaggi
    Tutto in Programmazione >
  • Sicurezza
    • Antispam
    • Antispyware
    • Antivirus
    • Server
    Tutto in Sicurezza >
  • Produttività
    • Backup
    • Compressione
    • Connettività
    • Database
    • Fax e Telefonia
    • Gestione disco
    • Ottimizzazione
    • Ufficio
    • Utilità di Sistema
    Tutto in Produttività >
  • Auto
    • Accessori Auto
    • Gare
    • Utility
    Tutto in Produttività >
  • Casa
    • Home Design
    • Home Security
    • IoT
    • Progettazione
    • Smart Home
    Tutto in Produttività >
Notizie
Video
Forum
in  
Trend
GuideHTMLJavaLinguaggio CPythonJavaScriptPHPC++CSSAndroidApprofondimenti
INDICE DELLA GUIDA
  1. 1 Introduzione a MVC

  2. 2 ViewModel != Model

  3. 3 Usare gli Extension Methods per riferirsi a pagine e risorse

  4. 4 Isolare il controller utilizzando la Dependency Injection

  5. lezione
    5 di 9

    Un framework di Dependency Injection per isolare il Controller

  6. 6 JQuery e JQuery UI per la realizzazione delle View

  7. 7 Autenticazione e protezione a portata di attributo

  8. 8 Estendere il framework: ActionFilter, HtmlHelper e ActionResult per ogni esigenza

  9. 9 Unit Testing e Mocking per testare i controller

  • Learn
  • Guida ASP.NET MVC Best Practices
  • Un framework di Dependency Injection per isolare il Controller
lezione
5 di 9

Un framework di Dependency Injection per isolare il Controller

  • di Michele Aponte
  • 9 Agosto 2010

La tecnica illustrata nella lezione precedente viene chiamata Dependency Injection, termine coniato da Martin Fowler, ed è uno dei servizi base di molti framework che implementano il pattern Inversion of Control (IoC) in cui le dipendenze tra layer applicativi sono risolte a run-time chiedendo ad un terzo attore, di solito una factory, di ottenere un’istanza della classe di cui abbiamo bisogno.

Il gruppo Patterns & Practices di Microsoft ha rilasciato, insieme alle sue famose Enterprise Library, un framework di IoC chiamato Unity, grazie al quale con poche semplice istruzioni possiamo rendere le dipendenze tra i nostri layer un parametro di configurazione.

Una volta scaricata e installata la libreria ci basta istruire la nostra applicazione su come trattare la dipendenza.

Se decidiamo di usare il web.config per gestire tale configurazione possiamo aggiungere una config section apposita:


<configSections>	
  <section name="unity" 
           type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections>

Per spiegare a Unity come risolvere il nostro ITestiWebServices a questo punto ci basta associare l’interfaccia all’implementazione che vogliamo utilizzando un elemento type:


<unity>
 <containers>
  <container>
   <types>
    <type type="ApplicationCore.Interfaces.Web.ITestiWebServices, ApplicationCore"
          mapTo="ApplicationServices.Web.TestiWebServices, ApplicationServices" />
   </types>
  </container>
 </containers>
</unity>

A questo punto possiamo chiedere a Unity di restituirci un’implementazione di ITestiWebServices che concretizzerà un’istanza di TestiWebServices. Il nostro costruttore diventerà quindi:


public ChiSiamoController()
{
  IUnityContainer container = new UnityContainer();
  UnityConfigurationSection section = (UnityConfigurationSection) ConfigurationManager.GetSection("unity");
  section.Containers.Default.Configure(container);
  this.testiServices = (ITestiWebServices)container.Resolve(typeof(ITestiWebServices));
}

Mentre il secondo costruttore a questo punto può essere eliminato.

Bello? Si, ma possiamo fare di più, considerando che la factory di ASP.NET MVC, che restituisce le classi controller in base alla richiesta pervenuta, può essere personalizzata! Estendiamo quindi la DefaultControllerFactory di MVC ed eseguiamo l’override del metodo GetControllerInstance:


public class UnityControllerFactory : DefaultControllerFactory
{
  IUnityContainer _container;     
  public UnityControllerFactory()
  {
    if(_container == null) _container = new UnityContainer();
    UnityConfigurationSection section = (UnityConfigurationSection) ConfigurationManager.GetSection("unity");
    section.Containers.Default.Configure(_container);
  }
  protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
  {
    return _container.Resolve(controllerType) as IController;
  }
}

La nostra classe non fa altro che mantenere un’istanza del container unity e risolvere i controller quando questi vengono richiesti. Per dire alla pipeline di ASP.NET MVC di usare il nostro controller anziché quello di default basta aggiugere all’Application_Start del global.asax le istruzioni:


IControllerFactory controllerFactory = new UnityControllerFactory();
ControllerBuilder.Current.SetControllerFactory(controllerFactory);

In questo modo possiamo eliminare dal nostro controller anche il costruttore vuoto, decorando con un attributo Dependency la property che rappresenta il servizio:


public class ChiSiamoController : Controller
{
  [Dependency]
  public ITestiWebServices TestiServices { get; set; }
  public ActionResult Index()
  {
    TestoDTO testo = this.TestiServices.RecuperaTesto("chisiamo");
	return View(testo);
  }
}

Infatti quando la nostra factory chiederà a Unity di risolvere il tipo ChiSiamoController, che non abbiamo aggiunto al nostro file di configurazione, il framework si preoccuperà di risolvere anche le property decorate, nel nostro caso TestiServices, rendendo le nostre implementazioni semplici ed eleganti.

Se vuoi aggiornamenti su Un framework di Dependency Injection per isolare il Controller inserisci la tua e-mail nel box qui sotto:

Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi:

6 / 9

JQuery e JQuery UI per la realizzazione delle View

Ultime notizie

Google Cloud Services Platform in beta

Cybersecurity: nelle aziende manca una cultura della sicurezza

Marzipan: App universali per iOS e MacOS?

Pagina 404: l’importanza del design

(In)sicurezza dei Password manager

I Video di HTML.it

Guido Magrin, da Milano a Roma per il .NET Campus

Percorsi formativi correlati
Android Mobile Developer

Android Mobile Developer

5
guide
250 ore

Tutti i linguaggi per diventare uno sviluppatore di app per Android.

DB Administrator

DB Administrator

4
guide
80 ore

Come creare applicazioni per il Web con PHP e MySQL per il DBMS.

iOS Mobile Developer

iOS Mobile Developer

4
guide
180 ore

Tutte le principali tecnologie per diventare uno sviluppatore mobile per iOS.

Java Developer

Java Developer

7
guide
300 ore

I fondamentali per lo sviluppo di applicazioni multi piattaforma con Java.

Java Security Expert

Java Security Expert

5
guide
120 ore

Diventare degli esperti in tema di sicurezza delle applicazioni Java.

Maker

Maker

2
guide
50 ore

Usare Raspberry Pi e Arduino per avvicinarsi al mondo dei Maker e dell’IoT.

NoSQL DB Expert

NoSQL DB Expert

5
guide
200 ore

Le principali guide di HTML.it per diventare un esperto dei database NoSQL.

PHP Cloud Developer

PHP Cloud Developer

7
guide
80 ore

Ecco come i professionisti creano applicazioni per il Cloud con PHP.

PHP Developer

PHP Developer

5
guide
100 ore

Lo sviluppo professionale di applicazioni in PHP alla portata di tutti.

PHP e JavaScript Developer

PHP e JavaScript Developer

6
guide
100 ore

Come sviluppare applicazioni Web dinamiche con PHP e JavaScript.

PHP Framework Expert

PHP Framework Expert

6
guide
120 ore

Realizzare applicazioni per il Web utilizzando i framework PHP.

PHP SysAdmin

PHP SysAdmin

6
guide
80 ore

Creare applicazioni PHP e gestire l’ambiente di sviluppo come un pro.

Sviluppare un eCommerce con PHP

Sviluppare un eCommerce con PHP

5
guide
120 ore

Fare gli eCommerce developer con Magento, Prestashop e WooCommerce.

Web &amp; Mobile Designer

Web & Mobile Designer

5
guide
300 ore

Percorso base per avvicinarsi al web design con un occhio al mobile.

WordPress Developer

WordPress Developer

5
guide
150 ore

Realizzare siti Web e Web application con WordPress a livello professionale.

Ti consigliamo anche

w3.css: guida all’uso

  • 14 Lezioni
  • Moderata

Guida pratica e completa all’uso del framework CSS w3.css: quali sono e come si usano le principali funzionalità che mette a disposizione, e come utilizzarlo per lo sviluppo di front end.

  • Raspberry Pi: guida all'uso
  • Pagina 404: l'importanza del design

Java: Local-Variable Type Inference

Analizziamo la Local-Variable Type Inference (inferenza automatica del tipo) di Java, una caratteristica che non attiene direttamente il linguaggio ma la fase di compilazione del codice.

  • Java 8 è arrivato al termine del suo ciclo di vita
  • Amazon Corretto, nuova distribuzione di OpenJDK con supporto LTS

Google Cloud Services Platform in beta

Cybersecurity: nelle aziende manca una cultura della sicurezza

Marzipan: App universali per iOS e MacOS?

  • Guide
  • Approfondimenti
  • Script
  • Q&A
  • Software
  • Tutorial
  • Videogiochi
  • Tag Software
  • News
  • Video
  • Forum
  • Chi siamo
  • Pubblicità
  • Contatti
  • Cookie policy
  • Privacy policy
  • Privacy Policy Newsletter
© HTML.it 1997-2019 | Triboo Media – P. IVA 06933670967 | HTML.it è un periodico telematico reg. Trib. Roma n. 309/2008 | 2.10.3