2010-10-02 8 views
7

Qual è il modo migliore per creare un bootstrapper per la mia app MVC 2? Sto usando Unity e AutoMapper e voglio astrarre il più possibile il caricamento e la configurazione di essi.Come devo implementare un Bootstrap MVC per Unity e AutoMapper?

Un esempio decente è qui (http://weblogs.asp.net/rashid/archive/2009/02/17/use-bootstrapper-in-your-asp-net-mvc-application-and-reduce-code-smell.aspx ), ma UnityContainer implementa IDisposable e in quell'esempio non viene mai pulito. Questo (Configuring Automapper in Bootstrapper violates Open-Closed Principle?) è anche un esempio decente, ma non tratta nemmeno il problema Unity/Disposable.

Ecco (http://www.dominicpettifer.co.uk/Blog/42/put-an-ioc-powered-bootstrapper-in-your-asp-net-mvc-application) un altro grande esempio di come fare un Bootstrapper, ma ancora non risolve il problema Unity/Disposable.

Ho pensato di mantenere il mio oggetto Bootstrapper in una variabile statica e renderlo implementabile IDisposable, ma non sembra corretto.

risposta

4

Se si mantiene un riferimento al contenitore nella classe Bootstrapper, è possibile eliminarlo alla fine dell'applicazione.

public static class Bootstrapper 
{ 
    private static IUnityContainer _container; 

    public static void Run() 
    { 
     _container = new UnityContainer(); 

     // Configure container here... 
    } 

    public static void Dispose() 
    { 
     _container.Dispose(); 
    } 
} 

public class YourHttpApplication : HttpApplication 
{ 
    protected void Application_Start() 
    { 
     Bootstrapper.Run(); 
    } 

    protected void Application_End() 
    { 
     Bootstrapper.Dispose(); 
    } 
} 

Oppure si potrebbe restituire il contenitore dal vostro programma di avvio automatico, mantenere un riferimento ad esso e smaltire sul finale dell'applicazione.

public class YourHttpApplication : HttpApplication 
{ 
    private IUnityContainer _container; 

    protected void Application_Start() 
    { 
     _container = Bootstrapper.Run(); 
    } 

    protected void Application_End() 
    { 
     _container.Dispose(); 
    } 
} 

A seconda delle vostre preferenze, immagino. A parte questo, uno qualsiasi degli esempi di bootstrap elencati nella domanda dovrebbe essere una buona scelta per avviare l'applicazione.

+0

Perché non hai utilizzato un pacchetto Bootstrapper e metodi dalla guida? Potrebbe essere simile a questo: 'Bootstrapper.With.Unity(). And.AutoMapper(). And.StartupTasks(). Start();' –

Problemi correlati