У меня есть приложение, использующее 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
и сделать каждый класс обслуживания зависимым от него? Как еще я могу разрешить своим классам обслуживания управлять единицей работы?