При исследовании реализации моей собственной IControllerFactory
я изучил реализацию по умолчанию DefaultControllerFactory
и был удивлен, увидев, что свойство RequestContext
устанавливается в методе CreateController(...)
, а затем на него ссылаются в GetControllerInstance(...)
и GetControllerType(...)
методы.
Причиной моего удивления является то, что, поскольку при запуске приложения создается экземпляр фабрики, один и тот же экземпляр используется для всех запросов, поэтому, если одновременно получено несколько запросов, у вас нет гарантии, какие запросы RequestContext
были выполнены. установите свойство, когда вы его используете.
Есть ли гарантия в структуре MVC, что зарегистрированный IControllerFactory
одновременно будет обслуживать только один запрос?
Если я что-то здесь упустил, пожалуйста, просветите меня, так как реализация моего контроллера будет проще, если у меня будет состояние между вызовами методов во время жизненного цикла запросов.
Спасибо.
EDIT:
Ответы даны, как я и ожидал, но упускаем суть вопроса. Дело в том, что DefautlControllerFactory, поставляемый как часть инфраструктуры MVC, хранит RequestContext, как если бы он имел состояние - посмотрите на источник.
Я считаю, что это неправильно, и ищу разъяснений (которые, я думаю, я вижу, поскольку оба ответа согласуются с моими мыслями). Я опубликовал кросс на форумах ASP.NET MVC.