2010-10-02 23 views
7

¿Cuál es la mejor manera de crear un bootstrapper para mi aplicación MVC 2? Estoy usando Unity y AutoMapper y quiero abstraer la carga y la configuración de ellos tanto como sea posible.¿Cómo debo implementar un MVC Bootstrapper para Unity y AutoMapper?

Un buen ejemplo está aquí (http://weblogs.asp.net/rashid/archive/2009/02/17/use-bootstrapper-in-your-asp-net-mvc-application-and-reduce-code-smell.aspx), pero UnityContainer implementa IDisposable y en ese ejemplo nunca se limpia. Esto (Configuring Automapper in Bootstrapper violates Open-Closed Principle?) también es un buen ejemplo, pero tampoco se ocupa del problema Unity/Disposable.

Aquí está (http://www.dominicpettifer.co.uk/Blog/42/put-an-ioc-powered-bootstrapper-in-your-asp-net-mvc-application) otro gran ejemplo de cómo hacer un Bootstrapper, pero nuevamente no resuelve el problema Unity/Disposable.

Pensé en mantener mi objeto Bootstrapper en una variable estática y hacer que implemente IDisposable, pero eso no suena bien.

Respuesta

4

Si mantiene una referencia al contenedor en la clase Bootstrapper, puede desecharlo al final de la aplicación.

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(); 
    } 
} 

O puede devolver el contenedor de su dispositivo de arranque, mantener una referencia y desecharlo en la aplicación.

public class YourHttpApplication : HttpApplication 
{ 
    private IUnityContainer _container; 

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

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

Depende de su preferencia, supongo. Aparte de eso, cualquiera de los ejemplos de arranque enumerados en la pregunta debe ser una buena opción para iniciar su aplicación.

+0

¿Por qué no usó un paquete Bootstrapper y los métodos de la guía? Puede parecerse a esto: 'Bootstrapper.With.Unity(). And.AutoMapper(). And.StartupTasks(). Start();' –

Cuestiones relacionadas