From 4b4531366d7d2a6367f7fcbb14f5dbaedb37c742 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 1 Jun 2018 18:26:59 +0300 Subject: [PATCH] Created IReadOnlyBasicRepository{TEntity} interface. --- .../ServiceCollectionRepositoryExtensions.cs | 35 +++++++++++------- .../Repositories/BasicRepositoryBase.cs | 8 ++++ .../Domain/Repositories/IBasicRepository.cs | 2 +- .../Repositories/IReadOnlyBasicRepository.cs | 37 ++++++++++--------- .../Repositories/IReadOnlyRepository.cs | 3 +- .../EntityFrameworkCore/EfCoreRepository.cs | 24 +++++++----- .../MemoryDb/MemoryDbRepository.cs | 5 +++ .../Repositories/MongoDB/MongoDbRepository.cs | 10 +++++ .../RepositoryRegistration_Tests.cs | 5 +++ 9 files changed, 86 insertions(+), 43 deletions(-) diff --git a/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs b/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs index 1f2cae53a3..ac66f35864 100644 --- a/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs +++ b/src/Volo.Abp.Ddd.Domain/Microsoft/Extensions/DependencyInjection/ServiceCollectionRepositoryExtensions.cs @@ -9,24 +9,31 @@ namespace Microsoft.Extensions.DependencyInjection { public static IServiceCollection AddDefaultRepository(this IServiceCollection services, Type entityType, Type repositoryImplementationType) { - //IReadOnlyRepository - var readOnlyRepositoryInterface = typeof(IReadOnlyRepository<>).MakeGenericType(entityType); - if (readOnlyRepositoryInterface.IsAssignableFrom(repositoryImplementationType)) + //IReadOnlyBasicRepository + var readOnlyBasicRepositoryInterface = typeof(IReadOnlyBasicRepository<>).MakeGenericType(entityType); + if (readOnlyBasicRepositoryInterface.IsAssignableFrom(repositoryImplementationType)) { - services.TryAddTransient(readOnlyRepositoryInterface, repositoryImplementationType); - } + services.TryAddTransient(readOnlyBasicRepositoryInterface, repositoryImplementationType); - //IBasicRepository - var basicRepositoryInterface = typeof(IBasicRepository<>).MakeGenericType(entityType); - if (basicRepositoryInterface.IsAssignableFrom(repositoryImplementationType)) - { - services.TryAddTransient(basicRepositoryInterface, repositoryImplementationType); + //IReadOnlyRepository + var readOnlyRepositoryInterface = typeof(IReadOnlyRepository<>).MakeGenericType(entityType); + if (readOnlyRepositoryInterface.IsAssignableFrom(repositoryImplementationType)) + { + services.TryAddTransient(readOnlyRepositoryInterface, repositoryImplementationType); + } - //IRepository - var repositoryInterface = typeof(IRepository<>).MakeGenericType(entityType); - if (repositoryInterface.IsAssignableFrom(repositoryImplementationType)) + //IBasicRepository + var basicRepositoryInterface = typeof(IBasicRepository<>).MakeGenericType(entityType); + if (basicRepositoryInterface.IsAssignableFrom(repositoryImplementationType)) { - services.TryAddTransient(repositoryInterface, repositoryImplementationType); + services.TryAddTransient(basicRepositoryInterface, repositoryImplementationType); + + //IRepository + var repositoryInterface = typeof(IRepository<>).MakeGenericType(entityType); + if (repositoryInterface.IsAssignableFrom(repositoryImplementationType)) + { + services.TryAddTransient(repositoryInterface, repositoryImplementationType); + } } } diff --git a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs index e1962fb416..e4906fa03f 100644 --- a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs +++ b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/BasicRepositoryBase.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; @@ -45,6 +46,13 @@ namespace Volo.Abp.Domain.Repositories { return CancellationTokenProvider.FallbackToProvider(prefferedValue); } + + public abstract List GetList(bool includeDetails = false); + + public virtual Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) + { + return Task.FromResult(GetList(includeDetails)); + } } public abstract class BasicRepositoryBase : BasicRepositoryBase, IBasicRepository diff --git a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IBasicRepository.cs b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IBasicRepository.cs index f9a29a9dbf..6a195c68be 100644 --- a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IBasicRepository.cs +++ b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IBasicRepository.cs @@ -5,7 +5,7 @@ using Volo.Abp.Domain.Entities; namespace Volo.Abp.Domain.Repositories { - public interface IBasicRepository : IRepository + public interface IBasicRepository : IReadOnlyBasicRepository where TEntity : class, IEntity { /// diff --git a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyBasicRepository.cs b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyBasicRepository.cs index 8024d80f37..fc3a6f5b00 100644 --- a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyBasicRepository.cs +++ b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyBasicRepository.cs @@ -6,7 +6,26 @@ using Volo.Abp.Domain.Entities; namespace Volo.Abp.Domain.Repositories { - public interface IReadOnlyBasicRepository : IRepository + public interface IReadOnlyBasicRepository : IRepository + where TEntity : class, IEntity + { + /// + /// Gets a list of all the entities. + /// + /// Set true to include all children of this entity + /// Entity + List GetList(bool includeDetails = false); + + /// + /// Gets a list of all the entities. + /// + /// Set true to include all children of this entity + /// A to observe while waiting for the task to complete. + /// Entity + Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default); + } + + public interface IReadOnlyBasicRepository : IReadOnlyBasicRepository where TEntity : class, IEntity { /// @@ -30,22 +49,6 @@ namespace Volo.Abp.Domain.Repositories [NotNull] Task GetAsync(TKey id, bool includeDetails = true, CancellationToken cancellationToken = default); - ///// - ///// Gets a list containing all the entities. - ///// - ///// Set true to include all children of this entity - ///// Entity - //[NotNull] - //List GetList(bool includeDetails = true); - - ///// - ///// Gets a list containing all the entities. - ///// - ///// Set true to include all children of this entity - ///// Entity - //[NotNull] - //Task> GetListAsync(bool includeDetails = true); - /// /// Gets an entity with given primary key or null if not found. /// diff --git a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs index c0956ac892..03aad9c048 100644 --- a/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs +++ b/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Repositories/IReadOnlyRepository.cs @@ -5,7 +5,8 @@ using Volo.Abp.Domain.Entities; namespace Volo.Abp.Domain.Repositories { - public interface IReadOnlyRepository : IQueryable + public interface IReadOnlyRepository : IQueryable, IReadOnlyBasicRepository + where TEntity : class, IEntity { IQueryable WithDetails(); diff --git a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs index 41e275fcfc..f9b7d265c3 100644 --- a/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs +++ b/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Domain/Repositories/EntityFrameworkCore/EfCoreRepository.cs @@ -112,6 +112,20 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore } } + public override List GetList(bool includeDetails = false) + { + return includeDetails + ? WithDetails().ToList() + : DbSet.ToList(); + } + + public override Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) + { + return includeDetails + ? WithDetails().ToListAsync(cancellationToken) + : DbSet.ToListAsync(cancellationToken); + } + protected override IQueryable GetQueryable() { return DbSet.AsQueryable(); @@ -222,16 +236,6 @@ namespace Volo.Abp.Domain.Repositories.EntityFrameworkCore return entity; } - //public List GetList(bool includeDetails = true) - //{ - // throw new NotImplementedException(); - //} - - //public Task> GetListAsync(bool includeDetails = true) - //{ - // throw new NotImplementedException(); - //} - public virtual TEntity Find(TKey id, bool includeDetails = true) { return includeDetails diff --git a/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index 62f6056088..a3c11ed062 100644 --- a/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs @@ -41,6 +41,11 @@ namespace Volo.Abp.Domain.Repositories.MemoryDb Collection.Remove(entity); } + public override List GetList(bool includeDetails = false) + { + return Collection.ToList(); + } + protected override IQueryable GetQueryable() { return ApplyDataFilters(Collection.AsQueryable()); diff --git a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index c099aa2f91..45621a189c 100644 --- a/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -173,6 +173,16 @@ namespace Volo.Abp.Domain.Repositories.MongoDB } } + public override List GetList(bool includeDetails = false) + { + return GetMongoQueryable().ToList(); + } + + public override async Task> GetListAsync(bool includeDetails = false, CancellationToken cancellationToken = default) + { + return await GetMongoQueryable().ToListAsync(cancellationToken); + } + public override void Delete(Expression> predicate, bool autoSave = false) { var entities = GetMongoQueryable() diff --git a/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs b/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs index 8412414108..8f28c9da67 100644 --- a/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs +++ b/test/Volo.Abp.Ddd.Tests/Volo/Abp/Domain/Repositories/RepositoryRegistration_Tests.cs @@ -250,6 +250,11 @@ namespace Volo.Abp.Domain.Repositories throw new NotImplementedException(); } + public override List GetList(bool includeDetails = false) + { + throw new NotImplementedException(); + } + protected override IQueryable GetQueryable() { throw new NotImplementedException();