Как создаются контроллеры asp.net mvc 2? - PullRequest
9 голосов
/ 21 октября 2010

Когда приложение asp.net получает уведомление об URL-адресе, оно направляет его на соответствующий контроллер и, в частности, на соответствующий метод.

Эти контроллеры размещены в стеке один раз?Или они снова создаются для каждого запроса?

Например, скажем, у меня есть контроллер с классом linq-to-sql, который создается в объявлении класса.Если у меня есть n запросов, которые направляются в этот контроллер, я породил n различных объектов класса linq-to-sql, каждый в своем собственном экземпляре контроллера или просто 1?

Мой инстинкт говорит мне, что контроллеры создаются по одномупросьба по соображениям безопасности ниток, но я не могу найти лучшего руководства, чем мой собственный желудочно-кишечный оракул.

1 Ответ

7 голосов
/ 21 октября 2010

Они создаются каждый раз по DefaultControllerFactory по умолчанию. В частности, в GetControllerInstance,

(IController)Activator.CreateInstance(controllerType);
Сначала вызывается

CreateController, который вызывает GetControllerType, чтобы получить тип контроллера на основе имени контроллера и пространств имен, переданных в маркерах данных маршрута. Затем он вызывает GetControllerInstance, который создает экземпляр контроллера.

Нет лучшего руководства, чем сам исходный код инфраструктуры MVC .

Вы можете определить свою собственную ControllerFactory, реализовав IControllerFactory, а затем контролировать, как и когда создаются экземпляры контроллеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...