/// <inheritdoc /> public IReadOnlyRepository <TEntity> GetReadOnlyRepository <TEntity>() where TEntity : class { Type entityType = typeof(TEntity); if (ReadOnlyRepositories.ContainsKey(entityType)) { Logger?.LogDebug($"Get existing ReadOnlyRepository for entity {typeof(TEntity).Name}"); return((IReadOnlyRepository <TEntity>)ReadOnlyRepositories[entityType]); } try { Logger?.LogDebug($"Get ReadOnlyRepository for entity {typeof(TEntity).Name} from services"); IReadOnlyRepository <TEntity> customRepo = DbContext.GetService <IReadOnlyRepository <TEntity> >(); ReadOnlyRepositories[entityType] = customRepo; return(customRepo); } catch { Logger?.LogDebug("Can't get ReadOnlyRepository from service provider"); } Logger?.LogDebug($"Creating new ReadOnlyRepository for entity {typeof(TEntity).Name}"); ReadOnlyRepositories[entityType] = new ReadOnlyRepository <TEntity>(DbContext); return((IReadOnlyRepository <TEntity>)ReadOnlyRepositories[entityType]); }
/// <summary> /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// </summary> /// <param name="disposing">The disposing.</param> protected virtual void Dispose(bool disposing) { lock (SyncRoot) { if (!Disposed && disposing) { Logger?.LogTrace("Disposing {0}", GetType().GetFriendlyName()); Repositories.Clear(); ReadOnlyRepositories.Clear(); DbContext.Dispose(); } Disposed = true; } }