【问题标题】:How should I implement an MVC Bootstrapper for Unity and AutoMapper?我应该如何为 Unity 和 AutoMapper 实现 MVC 引导程序?
【发布时间】:2010-10-02 00:14:12
【问题描述】:

为我的 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,但这听起来不对。

【问题讨论】:

    标签: asp.net-mvc unity-container automapper bootstrapper


    【解决方案1】:

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

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

    【讨论】:

    • 为什么不使用引导程序包和指南中的方法?它可能看起来像这样:Bootstrapper.With.Unity().And.AutoMapper().And.StartupTasks().Start();
    猜你喜欢
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2012-06-18
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多