Замок Виндзор Контроллер Фабрика и RenderAction - PullRequest
4 голосов
/ 07 мая 2010

У меня проблема с использованием фабрики контроллеров 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 голосов
/ 07 мая 2010

Я считаю, что стандартная конфигурация Castle Windsor - это Singleton. Вам нужно изменить это на Transient в вашем Web.Config или поместив этот атрибут в ваш класс [Transient].

...