【发布时间】:2011-04-27 12:06:00
【问题描述】:
在previous question 中,人们帮助我解决了存储库生命周期问题,现在有一个问题是如何使其在复合服务中正常工作。
假设我有服务:
public class OrderService : IOrderService
{
IRepository<Order> orderRepository;
public OrderService(IRepositoryFactory repositoryFactory)
{
orderRepository = repositoryFactory.GetRepository<Order>();
}
public void CreateOrder(OrderData orderData)
{
...
orderRepository.SubmitChanges();
}
}
public class ReservationService : IReservationService
{
IRepository<Reservation> reservationRepository;
public ReservationService(IRepositoryFactory repositoryFactory)
{
reservationRepository = repositoryFactory.GetRepository<Reservation>();
}
public void MakeReservations(OrderData orderData)
{
...
reservationService.SubmitChanges();
}
}
现在是有趣的部分 - 组合服务:
public class CompositionService : ICompositionService {
IOrderService orderService;
IReservationService reservationService;
public CompositionService(IOrderService orderService, IReservationService reservationService)
{
this.orderService = orderService;
this.reservationService = reservationService;
}
public void CreateOrderAndMakeReservations(OrderData orderData)
{
using (var ts = new TransactionScope())
{
orderService.CreateOrder(orderData);
reservationService.MakeReservations(orderData);
ts.Complete();
}
}
}
问题是,如果 IRepositoryFactory 的生活方式是短暂的,它将无法正常工作(因为您将获得两个不同的数据上下文,并且需要启用分布式事务,我们试图避免这种情况)。任何想法如何正确写这个?
【问题讨论】:
标签: c# castle-windsor ioc-container