我应该如何为Unity和AutoMapper实现MVC Bootstrapper?

gautem 发布于 2018-10-11 automapper 最后更新 2018-10-11 22:59 17 浏览

为我的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,在那个例子中它永远不会被清理。这个(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,但这听起来不对。

已邀请:

et_ea

赞同来自:

如果在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();
    }
}
我猜你的偏好取决于你的偏好。除此之外,问题中列出的任何引导示例都应该是引导应用程序的好选择。

要回复问题请先登录注册