我有一个使用ASP.NET MVC,Unity和Linq to SQL的应用程序.
统一寄存器容器的类型AcmeDataContext
,从继承System.Data.Linq.DataContext
,具有LifetimeManager
使用HttpContext
.
有一个控制器工厂使用统一容器获取控制器实例.我在构造函数上设置了所有依赖项,如下所示:
// 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
Run Code Online (Sandbox Code Playgroud)
每当需要构造函数时,unity容器就会解析一个连接,用于解析数据上下文,然后是存储库,然后是服务,最后是控制器.
问题是IEmployeeRepository
暴露SubmitChanges
方法,因为服务类没有DataContext
引用.
我被告知应该从存储库外部管理工作单元,所以我似乎应该SubmitChanges
从我的存储库中删除它.这是为什么?
如果这是真的,这是否意味着我必须声明一个IUnitOfWork
接口并使每个服务类依赖它?我还能如何让我的服务类来管理工作单元?
asp.net-mvc domain-driven-design dependency-injection inversion-of-control linq-to-sql