0

Я только начал получать удовольствие от MVC, когда кто-то упомянул мне контейнеры IoC, и теперь я чувствую, что упал на несколько тысяч футов и вам нужно снова подняться. У меня возникло соблазн просто игнорировать их, но затем я прочитал «Компонентный образ жизни». Мне кажется, что это очень важно для меня, как объяснено, недействительные изменения в обновлениях базы данных могут протекать через запросы, если для моих репозиториев Lifestyle установлено значение Singleton вместо PerWebRequest.MVC IoC Component Lifestyle PerWebRequest

Так что мой вопрос ... есть способ создать Компонент Lifestyle влияет без использования контейнеров IoC или это единственный вариант?

ответ

0

Вы всегда можете создать реализацию как Singleton. Однако, говоря о репозитории, я не думаю, что есть необходимость. Однако это не настоящая цель использования IoC. Использование IoC отделяет пользователя от вашего кода от самой реализации. Это упрощает тестирование, так как вы можете поменять местами все так же, как вам нужно. Кроме того, в моем случае я считаю это очень полезным для других целей. Например, возьмите кэширование. В моем локальном dev я использую Lucene.NET для обеспечения моей реализации кеша дисковым кэшем. Затем, когда я нажимаю на свои разработки и платформы, я использую стандартную реализацию кэша .net. Затем, когда я нажимаю на производство, я могу использовать реализацию Velocity или MemCached. Мне не нужно ничего делать, чтобы добраться от точки A до точки B, так как я использую StructureMap (мой предпочтительный контейнер IoC).

Похоже, что Component Lifestyle является скорее конструктивным решением, чем решением IoC. Все три метода, упомянутые здесь для управления жизнью объекта, могут выполняться без IoC ... но это может быть интересным побочным эффектом IoC (в некоторых случаях).

+1

Спасибо ... отделив мой код * приятно *, но не жизненно важен для меня в это время. Тем не менее, целостность данных по запросам * жизненно важна *, и я обеспокоен тем, что без IoC я как-то открываю свое приложение для возможных проблем с коррупцией. (ПРИМЕЧАНИЕ: мне еще предстоит реализовать реальное приложение с использованием MVC - всего четыре или пять демонстрационных приложений. Я только что читал две книги по этому вопросу - и объект контейнера IoC бросил меня на цикл) – dizzyguy

+0

«Ваш * SqlProductsRepository «в настоящее время этот образ жизни Singleton, поэтому вы сохраняете один LINQ to SQL * DataContext * до тех пор, пока ваше приложение запускается, деля его по всему запросу. Это может показаться прекрасным ... потому что пока доступ к данным доступен только для чтения, но это приведет к проблемам при запуске редактирования данных. Непредусмотренные изменения начнут протекать через запросы ». - Pro ASP.NET MVC Framework, стр. 101 – dizzyguy

+0

Если вы создаете экземпляр вашего контекста данных в контроллере или службе и« вставляете »это в свой репозиторий или хранилища для этой транзакции. .. then call commit ... и затем убить, что isntance контекста данных вы «должны» быть в порядке. Я никогда не оставляю свой datacontext открытым на протяжении жизненного цикла приложения. Он не находится за пределами транзакции. .., который я нашел безопасным способом сделать это. –

Смежные вопросы