7

MVC 2 アプリ用のブートストラップを作成する最良の方法は何ですか? Unity と AutoMapper を使用しており、それらの読み込みと構成を可能な限り抽象化したいと考えています。

適切な例はここにあります ( http://weblogs.asp.net/rashid/archive/2009/02/17/use-bootstrapper-in-your-asp-net-mvc-application-and-reduce-code-smell. aspx ) ですが、UnityContainer は IDisposable を実装しており、その例では決してクリーンアップされません。これ ( Bootstrapper で Automapper を構成すると Open-Closed Principle に違反しますか? ) も適切な例ですが、彼は Unity/Disposable の問題も扱っていません。

ここ ( http://www.domincpettifer.co.uk/Blog/42/put-an-ioc-powered-bootstrapper-in-your-asp-net-mvc-application ) は、ブートストラップを実行する方法の別の優れた例です。ただし、Unity/Disposable の問題には対処していません。

Bootstrapper オブジェクトを静的変数に保持し、IDisposable を実装することを考えましたが、それは正しくないように思えます。

4

1 に答える 1

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

私が推測するあなたの好みに依存します。それとは別に、質問にリストされているブートストラップの例は、アプリケーションのブートストラップに適しています。

于 2011-05-28T20:35:15.913 に答える