2015-01-08 1 views
0

캐슬 윈저를 DI 컨테이너로 사용하기 위해 asp.net mvc 4 솔루션을 설치했습니다. 나는 그것과 함께 log4Net 시설을 사용하고있다. 윈저 웹 사이트에 표시된 나는 Castle 컨테이너를 MVC 외부에서 사용하는 방법

private static IWindsorContainer container; 

private static void BootstrapContainer() 
{ 
    container = new WindsorContainer() 
    .Install(FromAssembly.This()); 
    var controllerFactory = new WindsorControllerFactory(container.Kernel); 
    ControllerBuilder.Current.SetControllerFactory(controllerFactory); 
} 

나는 설치 설정을하고 난 성공적으로 생성자를 통해 내 컨트롤러에 서비스를 주입하고 ...의 Global.asax에서 컨테이너 위로를 설정했습니다. 나는 또한 내 컨트롤러에서 log4Net 기능을 성공적으로 사용하고있다.

컨트롤러 외부에서 인터페이스 ILogger (log4net 구성 요소의 인터페이스)를 해결하는 데 컨테이너를 어떻게 사용할 수 있는지 알고 싶습니다. 예를 들어, 사용자 정의 HandleError 필터에서.

+2

사실 캐슬 윈저 문서에 대한 빠른 읽기는 당신에게 자동 응답을 줄 것이라고 믿습니다. –

답변

1

DI의 개념을 얼마나 잘 이해하고 있는지 잘 모릅니다. 직접 개념을 구현해야합니다. DI 컨테이너는 당신을 위해 그것을하지 않습니다. 최소한으로,이 속성과 생성자를 HandleError 클래스에 구현하십시오. 이 클래스에 DI를 제공하고 로거를 주입 할 수 있습니다.

private ILogger Logger { get; set; } 

public HandleError(ILogger logger) 
{ 
    Logger = logger; 
} 

당신이 질문을하는 방법

는 로거가 주입 될 수 있도록하는 방법을 모를 수있는 생각을 트리거합니다. DI를 제공하지 않으면 DI 컨테이너가 그 일을 할 수 없습니다. 결국 부트 스트 래퍼는 종속성을 해결하는 이상적인 장소입니다.

+0

또한 DI 및 DI 컨테이너의 업 스킬을 원할 수도 있습니다. 몇 가지 연구를하거나 매우 직접적인 튜토리얼을 시청하십시오. http://www.pluralsight.com/courses/dependency-injection-on-ramp –