Я работаю над проектом веб-приложения с использованием ASP.NET MVC3 и базы данных в SQL Server. Существует также мобильное приложение, которое использует данные из той же базы данных через службы REST. Вот несколько слоев моего приложения:
Модель - модель данных ADO.NET, использующая Entity Framework
Уровень доступа к данным - Хранилища с запросами для извлечения данных из базы данных
Веб-приложение - проект MVC3, использующий репозитории, слабая связь с использованием Structure Map и DI, контекст базы данных располагается в конце запроса HttpRequest
Core - еще один уровень между DAL и Service Layer, использует хранилища и предоставляет данные для Service Layer. Сортировка уровня бизнес-логики.
Сервисный уровень - REST-сервисы, знает о Базовом уровне, но не о DAL. Сопоставляет данные с DTO и предоставляет клиенту
Проблема, с которой я столкнулся при такой архитектуре приложения, заключается в слабой связи на уровне обслуживания. Сервисный уровень имеет ссылку на основной слой. Основной уровень имеет ссылку на уровень доступа к данным и использует его репозитории. У репозиториев нет конструктора по умолчанию. Они ожидают 1 параметр и его контекст объекта базы данных (одноразовый объект).
Использование репозиториев непосредственно на моем сайте не является проблемой. Я использую Structure Map, и DI делает его слабо связанным Каждый контекст располагается в конце запроса HttpRequest.
Проблема в том, что Service Layer и Core layer. Я бы тоже хотел иметь слабую связь, но не уверен, как этого добиться? Как внедрить в них контекст данных и убедиться, что он удаляется в определенный момент? Я хотел бы услышать несколько советов о том, как все это собрать вместе.