2012-11-09 20 views
0

我试图让我的头围绕建立在UnitOfWork模式上的现有系统。有许多存储库在其构造函数中都采用IUnitOfWork,以便服务层可以执行多个存储库调用,然后选择何时提交更改。使用UnitOfWork模式时的依赖注入

目前的服务代码可能是这个样子:

using (var uow = UnitOfWork.Start()) 
{ 
    var orderRepository = new OrderRepository(uow); 
    var productRepository = new ProductRepository(uow); 
    orderRepository.DoSomething(); 
    productRepository.DoSomethingElse(); 
    uow.Persist(); 
} 

我怎样才能在服务层引入真正的依赖注入,仍然保持UnitOfWork模式?

回答

0

我会使用工厂模式。在构造函数中注入工厂和重写:

using (var uow = this.unitOfWorkFactory.Create().Start()) 
{ 
    var orderRepository = new OrderRepository(uow); 
    var productRepository = new ProductRepository(uow); 
    orderRepository.DoSomething(); 
    productRepository.DoSomethingElse(); 
    uow.Persist(); 
} 

问候

+0

它我想注入资源库,该的UnitOfWork类是不是真正的问题... – Bjorn

+1

@Bjorn 对不起,我误解了这个问题。 一个解决方案是UnitOfWork会保存存储库的具体实现。 – Dzenan

+0

是的,我认为这是要走的路。它不是UoW知道存储库的理想方式,但另一方面,它很容易替换,因为它的界面很不错,而UoW对于它正试图协调的不同存储库来说是特定的。 – Bjorn