Я пишу свое первое приложение MVC (v3) и думаю, что неправильно организовал свои контроллеры.Я был бы признателен за некоторые рекомендации / советы.
Все это произошло, потому что я использую Ninject для внедрения зависимостей и хотел, чтобы он создавал только один экземпляр моего конкретного DataRepository для каждого «запроса».Это достаточно просто сделать, указав InRequestScope () в привязках Ninject ... но после этого я все еще продолжал видеть несколько экземпляров создаваемого моего DataRepository.
После долгого почесывания в голове, я начал наблюдатьсобытие BeginRequest в классе MvcApplication (в файле global.asax).И вот, то, что я считал одним «запросом» - например, одним постбэком из браузера - фактически дало несколько последовательных запросов.Ninject, согласно объявлению InRequestScope (), должным образом создал один экземпляр моего DataRepository для каждого из этих запросов.
К сожалению, это не совсем то, что я хочу.Мне бы хотелось, чтобы один экземпляр DataRepository создавался для этого единственного «запроса», инициированного браузером.Я не вижу, как я могу сделать это через Ninject.Я знаю, что мог бы указать InSingletonScope (), но хотя он будет использовать один экземпляр DataRepository для «запроса», он будет зависать до тех пор, пока веб-приложение не перезапустится.Это вызывает у меня все виды проблем с кэшированием Entity Framework.
При мониторинге событий BeginRequest мне кажется, что каждый раз, когда вызывается другой контроллер, генерируется новый запрос.Оглядываясь назад, это имеет смысл, но это не согласуется с дизайном моего приложения.Например, у меня есть некоторые общие методы действия, к которым примыкают различные другие методы действия (я сделал это вместо того, чтобы дублировать один и тот же код и представления в разных контроллерах).
Все это заставляет меня задуматься о следующем:если я хочу минимизировать количество экземпляров моего DataRepository, я должен минимизировать количество раз, когда один контроллер соединяется с другим контроллером.Это может означать, что мои методы действий должны быть объединены и, возможно, дублированы на нескольких контроллерах.
Это кажется ... странным.Если это правильный путь, хорошо, я могу жить с этим.Но я бы хотел узнать, что мне не хватает чего-то другого в процессе разработки приложений MVC :).Должен ли я, например, централизовать эти общие функции на уровне сервисов и создавать их только один раз за запрос?Если это глупый вопрос, извинения;Я не очень понимаю концепцию сервисного уровня.