Castle Windsor控制器工厂和RenderAction

时间:2010-05-06 22:04:39

标签: c# asp.net-mvc-2 castle-windsor

使用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);
        }
    }

有没有人知道我需要做些什么来让它与RenderAction一起使用?

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

1 个答案:

答案 0 :(得分:10)

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