private bool disposedValue = false; // To detect redundant calls

        void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: dispose managed state (managed objects).
                    if (_decorated != null)
                    {
                        _decorated.Dispose();
                        _decorated = null;
                    }
                    if (_transactionScope != null)
                    {
                        if (!_changesCommited)
                        {
                            CommitChanges();
                        }
                        _transactionScope.Dispose();
                        _transactionScope = null;
                    }
                }

                // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
                // TODO: set large fields to null.

                disposedValue = true;
            }
        }
 public CustomerComponentUow(ICustomerComponent decorated)
 {
     _decorated        = decorated ?? throw new ArgumentNullException(nameof(decorated));
     _transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);
 }