2010-05-06 6 views
4

새로운 RenderAction 메서드로 Castle Windsor Controller Factory를 사용할 때 문제가 발생합니다. 다음과 같은 오류 메시지가 나타납니다.Castle Windsor 컨트롤러 팩토리 및 RenderAction

컨트롤러 'MyController'의 단일 인스턴스를 사용하여 여러 요청을 처리 할 수 ​​없습니다. 사용자 정의 컨트롤러 팩토리가 사용 중이면 각 요청에 대해 컨트롤러의 새 인스턴스를 생성해야합니다.

이 내 컨트롤러 공장의 코드는 다음과 같습니다

public class CastleWindsorControllerFactory : DefaultControllerFactory 
    { 
     private IWindsorContainer container; 

     public CastleWindsorControllerFactory(IWindsorContainer container) 
     { 
      this.container = container; 
     } 

     public override IController CreateController(RequestContext requestContext, string controllerName) 
     { 
      return container.Resolve(controllerName) as IController; 
     } 

     public override void ReleaseController(IController controller) 
     { 
      this.container.Release(controller); 
     } 
    } 

사람이 나는 그것이 RenderAction와 함께 작동하도록 만들 필요가 변경되는지 알고 있나요?

여러 요청에 대해 이야기하기 때문에 오류 메시지가 약간 이상하지만 RenderAction이 실제로 다른 요청 (BeginRequest가 다시 발생하지 않음)을 생성하지 않는다고 알 수 있습니다.

답변

10

캐슬 윈저의 기본 구성이 싱글 톤이라고 생각합니다. Web.Config에서 이것을 Transient로 변경하거나이 속성을 클래스 [Transient]에 넣어야합니다.

+0

정확합니다. Windsor 구성 요소의 기본 라이프 스타일은 싱글 톤입니다. – PatrickSteele

+2

유창한 API http://stw.castleproject.org/Windsor.Registering-components-one-by-one.ashx?HL=transient#Configuring_components_lifestyle_3을 통해 임시로 등록 할 수도 있습니다. 등록을 위해 XML을 사용하는 것은 모범 사례로 간주되지 않습니다. –

관련 문제