Как создаются экземпляры asp.net mvc 2?
Когда приложение asp.net уведомляется о URL-адресе, оно направляет его соответствующему контроллеру и, в частности, соответствующему методу.
Являются ли эти контроллеры помещены в стек один раз? Или они снова создаются для каждого запроса?
Например, скажем, у меня есть контроллер с классом linq-to-sql, который создается в объявлении класса. Если у меня есть n запросов, которые направляются в этот контроллер, я породил n разных объектов класса linq-to-sql, каждый в своем собственном экземпляре контроллера или только 1?
Моя кишка говорит, что контроллеры порождаются по одному на запрос по причинам безопасности потока, но я не могу найти лучшего руководства, чем собственный желудочно-кишечный оракул.
Ответы
Ответ 1
Они получают экземпляр каждый раз DefaultControllerFactory
по умолчанию. В частности, в GetControllerInstance
,
(IController)Activator.CreateInstance(controllerType);
CreateController
сначала вызывается, который вызывает GetControllerType
, чтобы получить тип контроллера на основе имени контроллера и Промежуток имен, переданных в токенах данных маршрута. Затем он вызывает GetControllerInstance
, который создает экземпляр контроллера.
Нет лучшего руководства, чем исходный код среды MVC.
Вы можете определить свой собственный ControllerFactory, выполнив IControllerFactory
, а затем контролируйте, как и когда создаются контроллеры.