public SingleUseAggregateCachedRepository(
     IRepositoryExFactory repositoryFactory,
     IIdentity id)
 {
     _repositoryFactory = repositoryFactory;
     _wrappedRepository = _repositoryFactory.Create();
     _aggregate         = _wrappedRepository.GetById <TAggregate>(id);
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="wrappedRepository"></param>
 /// <param name="aggregate">When aggregate is not in cache this parameter is null and the
 /// instance of the aggregate is taken from the repository. </param>
 /// <param name="disposeAction"></param>
 /// <param name="afterSaveAction"></param>
 /// <param name="onExceptionAction"></param>
 /// <param name="id"></param>
 public CachableAggregateCachedRepository(
     IRepositoryEx wrappedRepository,
     TAggregate aggregate,
     Action <IIdentity, IRepositoryEx> disposeAction,
     Action <IIdentity, IRepositoryEx, IAggregateEx> afterSaveAction,
     Action <IIdentity, IRepositoryEx> onExceptionAction,
     IIdentity id)
 {
     _wrappedRepository = wrappedRepository;
     _disposeAction     = disposeAction;
     _afterSaveAction   = afterSaveAction;
     _onExceptionAction = onExceptionAction;
     _aggregate         = aggregate ?? wrappedRepository.GetById <TAggregate>(id);
 }