为我的MVC 2应用创建 bootstrap 的最佳方法是什么?我正在使用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,在该示例中,它从未被清除。这个(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,但这听起来不对。

最佳答案

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

或者,您可以从 bootstrap 返回容器,保留对其的引用,并将其放置在应用程序端。
public class YourHttpApplication : HttpApplication
{
    private IUnityContainer _container;

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

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

我猜取决于您的喜好。除此之外,问题中列出的任何引导示例都应该是引导应用程序的不错选择。

10-07 16:30