Castle Windsor控制器工厂和RenderAction

Bra*_*dis 4 c# castle-windsor asp.net-mvc-2

在使用Castle Windsor Controller Factory和新的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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

有谁知道我需要做什么改变才能使它与RenderAction一起使用?

我也发现错误消息有点奇怪,因为它讨论了多个请求,但是我可以告诉RenderAction实际上并没有创建另一个请求(BeginRequest不再被触发).

Kei*_*ler 10

我相信Castle Windsor的默认配置是Singleton.您需要在Web.Config中将此更改为Transient,或者将此属性添加到您的类中[Transient].

  • 您还可以通过流畅的API http://stw.castleproject.org/Windsor.Registering-components-one-by-one.ashx?HL=transient#Configuring_components_lifestyle_3将其注册为瞬态.使用XML进行注册不被视为最佳实践. (2认同)