public virtual TRepository GetRepository <TRepository>()
        {
            if (_repositoryCache.ContainsKey(typeof(TRepository)))
            {
                return((TRepository)_repositoryCache[typeof(TRepository)]);
            }
            // didn't find the repo in cache, lets create it

            var repoCreationMethod = _repositoryFactory.GetRepositoryFactory <TRepository>();


            object repo = repoCreationMethod(DataContext);


            _repositoryCache[typeof(TRepository)] = repo;
            return((TRepository)repo);
        }
        public TRepository GetRepository <TRepository>()
        {
            _repositoryCache.TryGetValue(typeof(TRepository), out var repoObject);
            if (repoObject != null)
            {
                return((TRepository)repoObject);
            }
            //Repo not found in cache, post it

            var repoCreationMethod = _repositoryFactory.GetRepositoryFactory <TRepository>();

            if (repoCreationMethod == null)
            {
                throw new NullReferenceException("No factory found for repo: " + typeof(TRepository).Name);
            }

            repoObject = repoCreationMethod(_dataContext);
            _repositoryCache[typeof(TRepository)] = repoObject;
            return((TRepository)repoObject);
        }