UnitOfWork.cs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Quadarax.Foundation.Core.Data.Interface.Domain;
  2. using Quadarax.Foundation.Core.Object;
  3. namespace Quadarax.Foundation.Core.Data.Domain
  4. {
  5. public class UnitOfWork<TDomainContext> : DisposableObject, IUnitOfWork<TDomainContext> where TDomainContext : IDomain
  6. {
  7. public TDomainContext Context { get; protected set; }
  8. public UnitOfWork(IDomainContextResolver<TDomainContext> context)
  9. {
  10. Context = context.GetCurrent<TDomainContext>();
  11. }
  12. public UnitOfWork(TDomainContext context)
  13. {
  14. Context = context;
  15. }
  16. public void Commit()
  17. {
  18. Context.Commit();
  19. }
  20. public IUnitOfWork<TCustomDomainContext> As<TCustomDomainContext>() where TCustomDomainContext : IDomain
  21. {
  22. return new UnitOfWork<TCustomDomainContext>((TCustomDomainContext)(IDomain)Context);
  23. }
  24. protected override void OnDisposing()
  25. {
  26. Context?.Rollback();
  27. Context = default;
  28. }
  29. }
  30. }