2010-10-02 6 views
7

내 MVC 2 앱용 부트 스트 래퍼를 만드는 가장 좋은 방법은 무엇입니까? Unity와 AutoMapper를 사용하고 있으며 가능한 한 많이 로딩하고 구성하려고합니다.Unity 및 AutoMapper 용 MVC 부트 스트 래퍼는 어떻게 구현해야합니까?

괜찮은 예는 여기 (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 개체를 유지하고 IDisposable 구현하도록 생각했지만 그 소리가 맞지 않습니다.

답변

4

부트 스트 래퍼 클래스의 컨테이너에 대한 참조를 유지하는 경우 응용 프로그램 끝에 배치 할 수 있습니다.

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

귀하의 기호에 따라 다릅니다. 그 외에도 질문에 나열된 부트 스트래핑 예제 중 하나를 사용하여 응용 프로그램을 부트 스트랩하는 것이 좋습니다.

+0

부트 스트 래퍼 패키지 및 가이드의 방법을 사용하지 않은 이유는 무엇입니까? 'Bootstrapper.With.Unity() .AutoMapper() .StartupTasks(). Start();와 같이 보일 것입니다. –

관련 문제