2017-02-27 7 views
0

내가 unity.config에서 연합 구성을 정의유니티 컨테이너를 유니티 구성에서 컨트롤러로 정의하는 방법은 무엇입니까?

MVC 응용 프로그램에서 사용되는 Microsoft 단결 구성하려고 :

protected void Application_Start() 
    { 
     GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 

     UnityConfig.RegisterComponents(); 


    } 

지금 :

public static class UnityConfig 
{ 
    public static void RegisterComponents() 
    { 
     var container = new UnityContainer(); 
     container.RegisterType<IAccessLogBLL, AccessLogBLL>();    
     DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
    } 
} 

내가 Global.asax에에서 그 구성이 전화를 그 컨테이너를 정의하기 전에 컨트롤러에서 메소드를 호출하여 올바르게 작동하지만 unity.config에 정의 된 컨테이너를 어떻게 사용할 수 있습니까? "getContainer"메서드가 있습니까? 아니면 유니티 컨테이너에 대한 전역 변수를 선언해야합니까? 영어

답변

1

가 Finallly 내가 용기 변수 정적을 선언하고 잘 작동 제에 대한

private IAccessLogBLL _accessLogBLL; 
    public AccessLogController() 
    { 

     IUnityContainer container = new UnityContainer();    
     container.RegisterType<IAccessLogBLL, AccessLogBLL>(); 
     DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
     _accessLogBLL = container.Resolve<IAccessLogBLL>(new ParameterOverride("unitOfWork", UnitOfWork)); 
    } 

감사하고 죄송합니다. 하지만 지금은 그것이 최선의 해결책은 아닙니다.

public static class UnityConfig 
{ 
    public static IUnityContainer container; 
    public static void RegisterComponents() 
    { 
     container = new UnityContainer(); 
     container.RegisterType<IAccessLogBLL, AccessLogBLL>();    
     DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
    } 
} 

그리고 내 컨트롤러 생성자를 형성 :

public AccessLogController() 
    { 

     _accessLogBLL = UnityConfig.container.Resolve<IAccessLogBLL>(new ParameterOverride("unitOfWork", UnitOfWork)); 

    } 
+1

이러한 접근은 괜찮지 만, 나는 ([엽기] (https://msdn.microsoft.com/en-us/library/dd642331을 사용합니다 v = .110) .aspx)를 사용하여 스레드 안전을 보장합니다. 예를 들면 :'개인 정적 게으른 컨테이너 = 새로운 게으른 (() => { VAR 컨테이너 = 새로운 UnityContainer(); /* 여기에 */ 리턴 용기를 당신의 유형을 등록, 을}) ; – strangecat

+0

그런 다음 적절한 [스레드 안전 모드]를 선택할 수 있습니다 (https://msdn.microsoft.com/en-us/library/system.threading.lazythreadsafetymode (v = vs.110) .aspx) – strangecat

+0

감사합니다. 조언을 확인할 것입니다. – Mikelon85