你知道某个地方有一个很好的例子吗?
我想要的是以下内容:
using(IUnitOfWork uow = UnitOfWork.Start())
{
repositoryA.Add(insanceOfA);
repositoryB.Add(instanceOfB);
uow.Commit();
}
但是这个案例太理想了,因为我还想要的是多个UnitOfWorks(在大多数情况下,每个演示者,对于Web应用程序来说不)。在这种情况下,如果我没有明确地给出明确喜欢的单元,那么存储库将如何知道要使用哪个UnitOfWork
repository.UnitOfWork = uow;
我的目标是让每个UnitOfWork都包含一个ISession,每个演示者一个UOW,每个演示者一个ISession。注意:我知道ISession实际上是UOW,但我必须这样做......
赞赏任何建议
答案 0 :(得分:3)
我所做的是将应该用于存储库的unitOfWork传递给我。
要实现此目的,您可以确保必须传递存储库构造函数中存储库必须使用的UnitOfWork实例。
为了使用起来更方便用户,您可以在UnitOfWork上创建特定于您的项目的扩展方法(假设您的UnitOfWork是通用的并在多个项目中使用),如下所示:
public static class UnitOfWorkExtensions
{
public static IRepositoryA GetRepositoryA( this UnitOfWork uow )
{
return new RepositoryA(uow);
}
public static IRepositoryB GetRepositoryB( this UnitOfWork uow )
{
return new RepositoryB(uow);
}
}
然后,它可以让你这样做:
using(IUnitOfWork uow = UnitOfWork.Start())
{
var repositoryA = uow.GetRepositoryA();
var repositoryB = uow.GetRepositoryB();
repositoryA.Add(insanceOfA);
repositoryB.Add(instanceOfB);
uow.Commit();
}