public TAggregate GetById <TAggregate>(Guid id, int version, ICorrelatedMessage source) where TAggregate : AggregateRoot, IEventSource
        {
            TAggregate agg = _cache?.GetById <TAggregate>(id, version);

            if (agg == null || agg.Version > version)
            {
                agg = _repository.GetById <TAggregate>(id, version);
                if (agg != null)
                {
                    _cache?.Save(agg);
                }
            }

            if (agg != null)
            {
                ((ICorrelatedEventSource)agg).Source = source;
            }
            return(agg);
        }
 public TAggregate GetById <TAggregate>(Guid id) where TAggregate : class, IEventSource
 {
     return(_cache.GetById <TAggregate>(id));
 }