Castle Windsor 控制器工厂和 RenderAction

4
我在使用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不会再次触发)。

1个回答

10

我相信Castle Windsor的默认配置是Singleton。你需要将其更改为Transient,可以在Web.Config中或通过在类上放置此属性[Transient]来实现。


你是正确的。Windsor组件的默认生命周期是singleton。 - PatrickSteele
2
你还可以通过流畅的API将其注册为瞬态。使用XML进行注册不被视为最佳实践。 - Krzysztof Kozmic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接