Как мне реализовать MVC Bootstrapper для Unity и AutoMapper? - PullRequest
7 голосов
/ 02 октября 2010

Каков наилучший способ создания загрузчика для моего приложения 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 и в этом примере он никогда не очищается. Это ( Настройка Automapper в Bootstrapper нарушает принцип Open-Closed? ) также является достойным примером, но он также не занимается проблемой 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, но это звучит неправильно.

1 Ответ

4 голосов
/ 29 мая 2011

Если вы сохраняете ссылку на контейнер в классе 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();
    }
}

Зависит от ваших предпочтений, я думаю.Кроме того, любой из примеров начальной загрузки, перечисленных в вопросе, должен быть хорошим выбором для начальной загрузки вашего приложения.

...