2010-10-02 82 views
7

什麼是爲我的MVC 2應用程序創建引導程序的最佳方式?我正在使用Unity和AutoMapper,並且想盡可能抽象它們的加載和配置。我應該如何爲Unity和AutoMapper實現MVC引導程序?

一個體面的例子在這裏(http://weblogs.asp.net/rashid/archive/2009/02/17/use-bootstrapper-in-your-asp-net-mvc-application-and-reduce-code-smell.aspx ),但UnityContainer實現IDisposable,在這個例子中它永遠不會被清理。這個(Configuring Automapper in Bootstrapper violates Open-Closed Principle?)也是一個很好的例子,但他也沒有處理Unity/Disposable問題。

這裏是(http://www.dominicpettifer.co.uk/Blog/42/put-an-ioc-powered-bootstrapper-in-your-asp-net-mvc-application)另一個如何做Bootstrapper的很好的例子,但又沒有解決Unity/Disposable問題。

我想過讓我的Bootstrapper對象保持在一個靜態變量中,並使其實現IDisposable,但這聽起來不對。

回答

4

如果您在Bootstrapper類中保留對容器的引用,則可以在應用程序結束時處理它。

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

或者您可以從引導程序返回容器,保留引用並將其放置在應用程序結束。

public class YourHttpApplication : HttpApplication 
{ 
    private IUnityContainer _container; 

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

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

取決於您的偏好我猜。除此之外,問題中列出的任何引導示例應該是引導應用程序的好選擇。

+0

爲什麼您沒有使用指南中的Bootstrapper軟件包和方法?它可能看起來像這樣:'Bootstrapper.With.Unity()。And.AutoMapper()。And.StartupTasks()。Start();' – 2017-02-05 20:07:10