2010-05-06 101 views
4
的RenderAction

我用我的溫莎城堡器廠與新方法的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

我相信溫莎城堡的默認配置是一個Singleton。您需要在Web.Config中將其更改爲Transient,或者將此屬性放在您的類[Transient]上。

+0

你是對的。 Windsor組件的默認生活方式是單身。 – PatrickSteele 2010-05-06 22:36:23

+2

你也可以把它註冊爲通過流暢API http://stw.castleproject.org/Windsor.Registering-components-one-by-one.ashx?HL=transient#Configuring_components_lifestyle_3短暫的。使用XML進行註冊並不被視爲最佳實踐。 – 2010-05-07 06:00:24