Что не так с этим дизайном системы ASP.net MVC?
У меня есть фотогалерея ASP.Net MVC 3, которая разработана таким образом:
Data Repositories(IImageRepoSitory, ITagRepository etc)
|
Services (IGalleryService, IWebService etc)
|
Web Application
Который я использую Ninject, чтобы внедрить необходимые сервисы и репозитории в веб-приложение.
Прежде чем использовать реальную базу данных, я использовал простой ArrayList (и сериализацию JSON) в качестве моей постоянной логики (это будет JsonImageRepository/JSonTagRepository), которая прекрасно работает. Но позже я перешел на EF4 CTP5 (Code First), и появилось много проблем. По сути, я внедрил эти репозитории и сервисы как Singleton (который объявлен в Global.asax.cs), но когда у меня есть несколько потоков, которые получают доступ к репозиториям, он говорит:
Подключение к данным закрыто.
Я изменил на что-то вроде Thread Mode или Request Mode в Ninject, но возникли различные исключения (в отношении нескольких экземпляров контекста, поэтому я думаю, что Singleton должен быть единственным вариантом).
Что-то не так с дизайном? или как мне настроить эти компоненты?
1 ответ
Обычно доступ к хранилищу должен находиться в области запроса (по крайней мере, те, которые изменяют данные). Я рекомендую просмотреть сообщения в блоге Боба о реализации шаблона репозитория с использованием Ninject и NHibernate. Это должно быть примерно то же самое для EF4:
http://blog.bobcravens.com/2010/06/the-repository-pattern-with-linq-to-fluent-nhibernate-and-mysql/
http://blog.bobcravens.com/2010/07/using-nhibernate-in-asp-net-mvc/
http://blog.bobcravens.com/2010/09/the-repository-pattern-part-2/
Я планировал добавить это в пример приложения в ближайшем будущем.