2016-12-20 3 views
0

저는 특히 캐슬 윈저와 IoC는 비교적 새로운 편입니다. 나는이처럼 내 구성 요소를 등록하고 : 다음 더있는 HttpContext이없는 코드 조각에 해결하고Castle Windsor : Transient Lifestyle에는 HttpContext가 필요합니까?

public static void Register(IWindsorContainer container) 
    { 
    container.Register(Classes.FromAssembly(Assembly.GetAssembly(typeof(GenericBaseRepository))) 
     .InSameNamespaceAs<GenericBaseRepository>() 
     .WithService.DefaultInterfaces() 
     .LifestyleTransient()); 
    } 

:

var baseRepository = ContainerManager.Container.Resolve<IBaseRepository>(); 

이 (IBaseRepository가 GenericBaseRepository에 의해 구현 된 인터페이스 인). 이것은 다음과 같은 메시지와 함께 실패합니다

"HttpContext.Current가 null PerWebRequestLifestyle은 ASP.Net에서 사용할 수 있습니다."나를 혼란

, 내가 선택한 라이프 스타일, PerWebRequest 과도하지 않기 때문에. 물론 HttpContext는 예약 된 작업 중에는 존재하지 않지만 실제로 필요하지는 않습니다. 단지 웹 요청과 상호 작용하지 않는 저장소의 인스턴스 만 원할뿐입니다.

그래서 Castle Windsor가 내 구성 요소를 해결할 때 HttpContext를 요구한다고 주장하는 이유는 무엇입니까?

답변

3

전체 예외 메시지를 살펴보십시오. 루트 구성 요소는 일시적 일 수 있지만 예외는 웹 요청 라이프 스타일에 따라 사용되는 종속성 중 하나를 나타냅니다.

윈저의 diagnostics debugger view을 살펴보면 그 점을 찾아 낼 수 있습니다.

+1

예, 실제로 그렇습니다. Castle Core/Windsor에 적합한 .pdb를 얻으려고 고심하고 (코드로 들어가기 위해 관리함), 이것이 범인이었습니다. –