Как удалить функциональность единицы работы из репозиториев с помощью IOC

У меня есть приложение, использующее ASP.NET MVC, Unity и Linq to SQL.

Единство контейнер регистрирует тип AcmeDataContext , который наследуется от System.Data.Linq.DataContext , с LifetimeManager , используя HttpContext .

Там - это фабрика контроллеров, которая получает экземпляры контроллера с помощью контейнера Unity. Я настроил все свои зависимости на конструкторы, примерно так:

// Initialize a new instance of the EmployeeController class
public EmployeeController(IEmployeeService service)

// Initializes a new instance of the EmployeeService class
public EmployeeService(IEmployeeRepository repository) : IEmployeeService

// Initialize a new instance of the EmployeeRepository class
public EmployeeRepository(AcmeDataContext dataContext) : IEmployeeRepository

Всякий раз, когда требуется конструктор, контейнер единства разрешает соединение, которое используется для разрешения контекста данных, затем репозитория, затем службы и, наконец, контроллера.

Проблема в том, что ] IEmployeeRepository предоставляет метод SubmitChanges , поскольку классы обслуживания НЕ имеют ссылки DataContext .

Мне сказали, что единицей работы нужно управлять извне репозиториев, поэтому мне кажется, что мне следует удалить SubmitChanges из моих репозиториев. Почему?

Если это правда, значит ли это, что я должен объявить интерфейс IUnitOfWork и сделать каждый класс обслуживания зависимым от него? Как еще я могу разрешить своим классам обслуживания управлять единицей работы?

10
задан Ed I 8 November 2010 в 22:16
поделиться