Как создаются экземпляры 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, а затем контролируйте, как и когда создаются контроллеры.