main
1using momoney.database.transactions;
2using momoney.service.infrastructure.transactions;
3
4namespace MoMoney.Service.Infrastructure.Transactions
5{
6 public class UnitOfWorkFactory : IUnitOfWorkFactory
7 {
8 readonly IContext context;
9 readonly ISessionFactory factory;
10 readonly IKey<ISession> key;
11
12 public UnitOfWorkFactory(IContext context, ISessionFactory factory, IKey<ISession> key)
13 {
14 this.context = context;
15 this.key = key;
16 this.factory = factory;
17 }
18
19 public IUnitOfWork create()
20 {
21 return unit_of_work_been_started() ? new EmptyUnitOfWork() : start_a_new_unit_of_work();
22 }
23
24 bool unit_of_work_been_started()
25 {
26 return context.contains(key);
27 }
28
29 IUnitOfWork start_a_new_unit_of_work()
30 {
31 var session = factory.create();
32 context.add(key, session);
33 return new UnitOfWork(session, context, key);
34 }
35 }
36}