diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestBehavior.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestBehavior.cs index 63d9bca..20f286a 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestBehavior.cs +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestBehavior.cs @@ -71,7 +71,7 @@ public async Task Handle( }) { // cache disabled - return await next(); + return await next(cancellationToken); } CacheEntry? result = null; @@ -92,7 +92,7 @@ public async Task Handle( return result.Value; } - result = new CacheEntry(await next(), _dateTimeProvider.Now().ToUnixTimeSeconds()); + result = new CacheEntry(await next(cancellationToken), _dateTimeProvider.Now().ToUnixTimeSeconds()); if (request.LocalCacheBehavior is CacheBehavior.UpdateCacheIfMiss) { @@ -197,4 +197,4 @@ private async Task UpdateCacheEntryAsync( } } } -} \ No newline at end of file +} diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/Cnblogs.Architecture.Ddd.Cqrs.Abstractions.csproj b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/Cnblogs.Architecture.Ddd.Cqrs.Abstractions.csproj index 1113372..e51bb1b 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/Cnblogs.Architecture.Ddd.Cqrs.Abstractions.csproj +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/Cnblogs.Architecture.Ddd.Cqrs.Abstractions.csproj @@ -17,17 +17,16 @@ - - + - - + + diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore.csproj b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore.csproj index 7dbbbcf..e2a9e3a 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore.csproj +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore.csproj @@ -8,15 +8,15 @@ - + - + - + diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CqrsResult.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CqrsResult.cs index 8dfe755..1338254 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CqrsResult.cs +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.AspNetCore/CqrsResult.cs @@ -6,7 +6,8 @@ namespace Cnblogs.Architecture.Ddd.Cqrs.AspNetCore; /// /// Send object as json and append X-Cqrs-Version header /// -/// +/// Response body. +/// to use. public class CqrsResult(object commandResponse, JsonSerializerOptions? options = null) : IResult { /// diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.Clickhouse/ClickhouseDbConnectionFactory.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.Clickhouse/ClickhouseDbConnectionFactory.cs index 6021841..e2e43b7 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.Clickhouse/ClickhouseDbConnectionFactory.cs +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.Clickhouse/ClickhouseDbConnectionFactory.cs @@ -1,5 +1,5 @@ using System.Data; -using ClickHouse.Client.ADO; +using ClickHouse.Client; using Cnblogs.Architecture.Ddd.Infrastructure.Dapper; namespace Cnblogs.Architecture.Ddd.Cqrs.Dapper.Clickhouse; @@ -7,22 +7,11 @@ namespace Cnblogs.Architecture.Ddd.Cqrs.Dapper.Clickhouse; /// /// Clickhouse connection factory. /// -public class ClickhouseDbConnectionFactory : IDbConnectionFactory +public class ClickhouseDbConnectionFactory(IClickHouseDataSource dataSource) : IDbConnectionFactory { - private readonly string _connectionString; - - /// - /// Create a clickhouse connection factory. - /// - /// The connection string. - public ClickhouseDbConnectionFactory(string connectionString) - { - _connectionString = connectionString; - } - /// public IDbConnection CreateDbConnection() { - return new ClickHouseConnection(_connectionString); + return dataSource.CreateConnection(); } } diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.Clickhouse/DapperConfigurationBuilderExtension.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.Clickhouse/DapperConfigurationBuilderExtension.cs index 590eace..bf5d921 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.Clickhouse/DapperConfigurationBuilderExtension.cs +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.Clickhouse/DapperConfigurationBuilderExtension.cs @@ -21,7 +21,8 @@ public static void UseClickhouse( string connectionString) where TContext : ClickhouseDapperContext { - builder.UseDbConnectionFactory(new ClickhouseDbConnectionFactory(connectionString)); + builder.UseDbConnectionFactory(); + builder.Services.AddClickHouseDataSource(connectionString); builder.Services.AddSingleton(new ClickhouseContextOptions(connectionString)); builder.Services.Configure(x => x.Add()); builder.Services.AddHostedService(); diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.SqlServer/Cnblogs.Architecture.Ddd.Cqrs.Dapper.SqlServer.csproj b/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.SqlServer/Cnblogs.Architecture.Ddd.Cqrs.Dapper.SqlServer.csproj index 2385ae8..89a9658 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.SqlServer/Cnblogs.Architecture.Ddd.Cqrs.Dapper.SqlServer.csproj +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper.SqlServer/Cnblogs.Architecture.Ddd.Cqrs.Dapper.SqlServer.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper/DapperConfigurationBuilder.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper/DapperConfigurationBuilder.cs index 95cb79a..62a3542 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper/DapperConfigurationBuilder.cs +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Dapper/DapperConfigurationBuilder.cs @@ -29,10 +29,23 @@ public DapperConfigurationBuilder(IServiceCollection services) /// 工厂对象。 /// 工厂类型。 public void UseDbConnectionFactory(TFactory factory) - where TFactory : IDbConnectionFactory + where TFactory : class, IDbConnectionFactory { + Services.AddSingleton(factory); Services.Configure( - c => c.AddDbConnectionFactory(_dapperContextTypeName, factory)); + c => c.AddDbConnectionFactory(_dapperContextTypeName, typeof(TFactory))); + } + + /// + /// Add as and get instance from DI when used. + /// + /// The factory type. + public void UseDbConnectionFactory() + where TFactory : class, IDbConnectionFactory + { + Services.AddSingleton(); + Services.Configure( + c => c.AddDbConnectionFactory(_dapperContextTypeName, typeof(TFactory))); } /// diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.MongoDb.Analyzer/Cnblogs.Architecture.Ddd.Cqrs.MongoDb.Analyzer.csproj b/src/Cnblogs.Architecture.Ddd.Cqrs.MongoDb.Analyzer/Cnblogs.Architecture.Ddd.Cqrs.MongoDb.Analyzer.csproj index b313693..8bb43b7 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.MongoDb.Analyzer/Cnblogs.Architecture.Ddd.Cqrs.MongoDb.Analyzer.csproj +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.MongoDb.Analyzer/Cnblogs.Architecture.Ddd.Cqrs.MongoDb.Analyzer.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.ServiceAgent/Cnblogs.Architecture.Ddd.Cqrs.ServiceAgent.csproj b/src/Cnblogs.Architecture.Ddd.Cqrs.ServiceAgent/Cnblogs.Architecture.Ddd.Cqrs.ServiceAgent.csproj index 090e93e..d96fb77 100644 --- a/src/Cnblogs.Architecture.Ddd.Cqrs.ServiceAgent/Cnblogs.Architecture.Ddd.Cqrs.ServiceAgent.csproj +++ b/src/Cnblogs.Architecture.Ddd.Cqrs.ServiceAgent/Cnblogs.Architecture.Ddd.Cqrs.ServiceAgent.csproj @@ -12,11 +12,11 @@ - + - + diff --git a/src/Cnblogs.Architecture.Ddd.Domain.Abstractions/Cnblogs.Architecture.Ddd.Domain.Abstractions.csproj b/src/Cnblogs.Architecture.Ddd.Domain.Abstractions/Cnblogs.Architecture.Ddd.Domain.Abstractions.csproj index d5de275..9c20865 100644 --- a/src/Cnblogs.Architecture.Ddd.Domain.Abstractions/Cnblogs.Architecture.Ddd.Domain.Abstractions.csproj +++ b/src/Cnblogs.Architecture.Ddd.Domain.Abstractions/Cnblogs.Architecture.Ddd.Domain.Abstractions.csproj @@ -14,7 +14,7 @@ - + diff --git a/src/Cnblogs.Architecture.Ddd.Domain.Abstractions/IUnitOfWork.cs b/src/Cnblogs.Architecture.Ddd.Domain.Abstractions/IUnitOfWork.cs index 85e2897..d993245 100644 --- a/src/Cnblogs.Architecture.Ddd.Domain.Abstractions/IUnitOfWork.cs +++ b/src/Cnblogs.Architecture.Ddd.Domain.Abstractions/IUnitOfWork.cs @@ -20,7 +20,6 @@ public interface IUnitOfWork /// 添加实体,调用 后才会写入数据库。 /// /// 要添加实体。 - /// 实体类型。 /// 被添加的实体。 TEntity Add(TEntity entity); @@ -28,7 +27,6 @@ public interface IUnitOfWork /// 更新实体,调用 后才会写入数据库。 /// /// 要更新的实体。 - /// 实体类型。 /// 被更新的实体。 TEntity Update(TEntity entity); @@ -36,7 +34,6 @@ public interface IUnitOfWork /// 删除实体,调用 后才会写入数据库。 /// /// 要删除的实体。 - /// 实体类型。 /// TEntity Delete(TEntity entity); @@ -53,4 +50,4 @@ public interface IUnitOfWork /// 。 /// 提交是否成功。 Task SaveEntitiesAsync(CancellationToken cancellationToken = default); -} \ No newline at end of file +} diff --git a/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/Cnblogs.Architecture.Ddd.EventBus.Dapr.csproj b/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/Cnblogs.Architecture.Ddd.EventBus.Dapr.csproj index 18d6fcb..44ef61a 100644 --- a/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/Cnblogs.Architecture.Ddd.EventBus.Dapr.csproj +++ b/src/Cnblogs.Architecture.Ddd.EventBus.Dapr/Cnblogs.Architecture.Ddd.EventBus.Dapr.csproj @@ -9,6 +9,6 @@ - + diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.InMemory/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.InMemory.csproj b/src/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.InMemory/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.InMemory.csproj index 32e6024..4354146 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.InMemory/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.InMemory.csproj +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.InMemory/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.InMemory.csproj @@ -16,7 +16,7 @@ - + diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.Redis/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.Redis.csproj b/src/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.Redis/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.Redis.csproj index 318a3c0..9f9c587 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.Redis/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.Redis.csproj +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.Redis/Cnblogs.Architecture.Ddd.Infrastructure.CacheProviders.Redis.csproj @@ -12,7 +12,7 @@ - + diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse/ClickhouseDapperContext.cs b/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse/ClickhouseDapperContext.cs index 5d648ba..d95ec15 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse/ClickhouseDapperContext.cs +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse/ClickhouseDapperContext.cs @@ -15,10 +15,12 @@ public abstract class ClickhouseDapperContext : DapperContext /// /// The underlying collection. /// The options used for this context. + /// The service provider to use. protected ClickhouseDapperContext( IOptions dbConnectionFactoryCollection, - ClickhouseContextOptions options) - : base(dbConnectionFactoryCollection) + ClickhouseContextOptions options, + IServiceProvider serviceProvider) + : base(dbConnectionFactoryCollection, serviceProvider) { _options = options; } diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse.csproj b/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse.csproj index bfd4182..7966982 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse.csproj +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.Clickhouse.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.csproj b/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.csproj index 9be1738..d0bdaba 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.csproj +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/Cnblogs.Architecture.Ddd.Infrastructure.Dapper.csproj @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ - + diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/DapperContext.cs b/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/DapperContext.cs index 77acd16..effe5be 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/DapperContext.cs +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/DapperContext.cs @@ -1,5 +1,5 @@ using System.Data; - +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace Cnblogs.Architecture.Ddd.Infrastructure.Dapper; @@ -13,9 +13,13 @@ public abstract class DapperContext /// 创建一个 DapperContext。 /// /// 数据库连接工厂集合。 - protected DapperContext(IOptions dbConnectionFactoryCollection) + /// The service provider to get connection factory + protected DapperContext(IOptions dbConnectionFactoryCollection, IServiceProvider sp) { - DbConnectionFactory = dbConnectionFactoryCollection.Value.GetFactory(GetType().Name); + var type = dbConnectionFactoryCollection.Value.GetFactory(GetType().Name); + DbConnectionFactory = sp.GetRequiredService(type) as IDbConnectionFactory + ?? throw new InvalidOperationException( + $"No DbConnectionFactory(type: {type.Name}) configured."); } /// diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/DbConnectionFactoryCollection.cs b/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/DbConnectionFactoryCollection.cs index 3b25a93..9af85ef 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/DbConnectionFactoryCollection.cs +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.Dapper/DbConnectionFactoryCollection.cs @@ -5,7 +5,7 @@ /// public class DbConnectionFactoryCollection { - private readonly Dictionary _factories = new(); + private readonly Dictionary _factories = new(); /// /// 添加数据库连接工厂。 @@ -13,12 +13,12 @@ public class DbConnectionFactoryCollection /// 名称。 /// 工厂示例。 /// Throw when already been registered with other factory. - public void AddDbConnectionFactory(string name, IDbConnectionFactory factory) + public void AddDbConnectionFactory(string name, Type factory) { if (_factories.TryGetValue(name, out var value)) { throw new InvalidOperationException( - $"The dapper context already configured with db connection factory: {value.GetType().Name}"); + $"The dapper context already configured with db connection factory: {value.Name}"); } _factories.Add(name, factory); @@ -29,7 +29,7 @@ public void AddDbConnectionFactory(string name, IDbConnectionFactory factory) /// /// 名称。 /// 工厂示例。 - public IDbConnectionFactory GetFactory(string name) + public Type GetFactory(string name) { return _factories[name]; } diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework.csproj b/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework.csproj index dca9848..112d612 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework.csproj +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework/Cnblogs.Architecture.Ddd.Infrastructure.EntityFramework.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/Cnblogs.Architecture.Ddd.Infrastructure.MongoDb/Cnblogs.Architecture.Ddd.Infrastructure.MongoDb.csproj b/src/Cnblogs.Architecture.Ddd.Infrastructure.MongoDb/Cnblogs.Architecture.Ddd.Infrastructure.MongoDb.csproj index f4e4317..969709c 100644 --- a/src/Cnblogs.Architecture.Ddd.Infrastructure.MongoDb/Cnblogs.Architecture.Ddd.Infrastructure.MongoDb.csproj +++ b/src/Cnblogs.Architecture.Ddd.Infrastructure.MongoDb/Cnblogs.Architecture.Ddd.Infrastructure.MongoDb.csproj @@ -10,7 +10,7 @@ - + diff --git a/test/Cnblogs.Architecture.IntegrationTests/Cnblogs.Architecture.IntegrationTests.csproj b/test/Cnblogs.Architecture.IntegrationTests/Cnblogs.Architecture.IntegrationTests.csproj index 685c378..9ea8bc3 100644 --- a/test/Cnblogs.Architecture.IntegrationTests/Cnblogs.Architecture.IntegrationTests.csproj +++ b/test/Cnblogs.Architecture.IntegrationTests/Cnblogs.Architecture.IntegrationTests.csproj @@ -1,23 +1,17 @@ - - - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - - - + + + @@ -29,14 +23,4 @@ - - - - - - - - - - diff --git a/test/Cnblogs.Architecture.IntegrationTests/CommandResponseHandlerTests.cs b/test/Cnblogs.Architecture.IntegrationTests/CommandResponseHandlerTests.cs index 28cea2e..6a64974 100644 --- a/test/Cnblogs.Architecture.IntegrationTests/CommandResponseHandlerTests.cs +++ b/test/Cnblogs.Architecture.IntegrationTests/CommandResponseHandlerTests.cs @@ -55,7 +55,7 @@ public async Task MinimalApi_CqrsV2_CommandResponseAsync() // Assert response.Headers.CqrsVersion().Should().BeGreaterThan(1); content.Should().NotBeNull(); - content!.Response.Should().NotBeNullOrEmpty(); + content.Response.Should().NotBeNullOrEmpty(); } [Fact] @@ -162,7 +162,7 @@ public async Task MinimalApi_HavingError_CommandResponseAsync(bool needValidatio // Assert response.Should().HaveClientError(); commandResponse.Should().NotBeNull(); - commandResponse!.IsSuccess().Should().BeFalse(); + commandResponse.IsSuccess().Should().BeFalse(); commandResponse.Should().BeEquivalentTo(new { IsValidationError = needValidationError }); (commandResponse.ErrorCode != null).Should().Be(needExecutionError); } @@ -257,7 +257,7 @@ public async Task Mvc_HavingError_CommandResponseAsync(bool needValidationError, // Assert response.Should().HaveClientError(); content.Should().NotBeNull(); - content!.IsSuccess().Should().BeFalse(); + content.IsSuccess().Should().BeFalse(); content.Should().BeEquivalentTo(new { IsValidationError = needValidationError }); (content.ErrorCode != null).Should().Be(needExecutionError); } diff --git a/test/Cnblogs.Architecture.IntegrationTests/CqrsRouteMapperTests.cs b/test/Cnblogs.Architecture.IntegrationTests/CqrsRouteMapperTests.cs index 7d2daec..1292aa5 100644 --- a/test/Cnblogs.Architecture.IntegrationTests/CqrsRouteMapperTests.cs +++ b/test/Cnblogs.Architecture.IntegrationTests/CqrsRouteMapperTests.cs @@ -51,7 +51,7 @@ public async Task ListItems_SuccessAsync() // Assert response.Should().BeSuccessful(); content.Should().NotBeNull(); - content!.Items.Should().NotBeNullOrEmpty(); + content.Items.Should().NotBeNullOrEmpty(); } [Fact] diff --git a/test/Cnblogs.Architecture.TestShared/Cnblogs.Architecture.TestShared.csproj b/test/Cnblogs.Architecture.TestShared/Cnblogs.Architecture.TestShared.csproj index e633a27..438360a 100644 --- a/test/Cnblogs.Architecture.TestShared/Cnblogs.Architecture.TestShared.csproj +++ b/test/Cnblogs.Architecture.TestShared/Cnblogs.Architecture.TestShared.csproj @@ -1,6 +1,16 @@ - - - - - \ No newline at end of file + + + + + + + + + + + + + + + diff --git a/test/Cnblogs.Architecture.UnitTests/Cnblogs.Architecture.UnitTests.csproj b/test/Cnblogs.Architecture.UnitTests/Cnblogs.Architecture.UnitTests.csproj index 3880bba..477a915 100644 --- a/test/Cnblogs.Architecture.UnitTests/Cnblogs.Architecture.UnitTests.csproj +++ b/test/Cnblogs.Architecture.UnitTests/Cnblogs.Architecture.UnitTests.csproj @@ -1,14 +1,12 @@ - - - - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/CacheBehaviorTests.cs b/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/CacheBehaviorTests.cs index c08c6cf..82f6644 100644 --- a/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/CacheBehaviorTests.cs +++ b/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/CacheBehaviorTests.cs @@ -24,7 +24,7 @@ public async Task CacheBehavior_DisableCache_NotCacheAsync() local.AddCacheValue("cacheKey", "cacheValue"); var remote = Substitute.For(); remote.AddCacheValue("cacheKey", "cacheValue"); - var behavior = GetBehavior, string>(new List { local, remote }); + var behavior = GetBehavior, string>([local, remote]); // Act var result = await behavior.Handle( @@ -33,7 +33,7 @@ public async Task CacheBehavior_DisableCache_NotCacheAsync() LocalCacheBehavior = CacheBehavior.DisabledCache, RemoteCacheBehavior = CacheBehavior.DisabledCache }, - () => Task.FromResult("noCache"), + _ => Task.FromResult("noCache"), CancellationToken.None); // Assert @@ -45,7 +45,7 @@ public async Task CacheBehavior_EnableLocal_NoCache_UpdateAsync() { // Arrange var local = Substitute.For(); - var behavior = GetBehavior, string>(new List { local }); + var behavior = GetBehavior, string>([local]); // Act var result = await behavior.Handle( @@ -55,7 +55,7 @@ public async Task CacheBehavior_EnableLocal_NoCache_UpdateAsync() LocalExpires = TimeSpan.FromSeconds(1), RemoteCacheBehavior = CacheBehavior.DisabledCache }, - () => Task.FromResult("noCache"), + _ => Task.FromResult("noCache"), CancellationToken.None); // Assert @@ -70,7 +70,7 @@ public async Task CacheBehavior_EnableLocal_HasCache_UseCacheAsync() var local = Substitute.For(); local.AddCacheValue("cacheKey", "cacheValue"); var remote = Substitute.For(); - var behavior = GetBehavior, string>(new List { local, remote }); + var behavior = GetBehavior, string>([local, remote]); // Act var result = await behavior.Handle( @@ -80,7 +80,7 @@ public async Task CacheBehavior_EnableLocal_HasCache_UseCacheAsync() LocalExpires = TimeSpan.FromSeconds(1), RemoteCacheBehavior = CacheBehavior.DisabledCache }, - () => Task.FromResult("noCache"), + _ => Task.FromResult("noCache"), CancellationToken.None); // Assert @@ -95,7 +95,7 @@ public async Task CacheBehavior_EnableRemote_NoCache_UpdateAsync() // Arrange var remote = Substitute.For(); var local = Substitute.For(); - var behavior = GetBehavior, string>(new List { local, remote }); + var behavior = GetBehavior, string>([local, remote]); // Act var result = await behavior.Handle( @@ -105,7 +105,7 @@ public async Task CacheBehavior_EnableRemote_NoCache_UpdateAsync() RemoteCacheBehavior = CacheBehavior.UpdateCacheIfMiss, RemoteExpires = TimeSpan.FromSeconds(1) }, - () => Task.FromResult("noCache"), + _ => Task.FromResult("noCache"), CancellationToken.None); // Assert @@ -120,7 +120,7 @@ public async Task CacheBehavior_EnableRemote_HasCache_UseCacheAsync() // Arrange var remote = Substitute.For().AddCacheValue("cacheKey", "cacheValue"); var local = Substitute.For(); - var behavior = GetBehavior, string>(new List { local, remote }); + var behavior = GetBehavior, string>([local, remote]); // Act var result = await behavior.Handle( @@ -130,7 +130,7 @@ public async Task CacheBehavior_EnableRemote_HasCache_UseCacheAsync() RemoteCacheBehavior = CacheBehavior.UpdateCacheIfMiss, RemoteExpires = TimeSpan.FromSeconds(1) }, - () => Task.FromResult("noCache"), + _ => Task.FromResult("noCache"), CancellationToken.None); // Assert @@ -145,7 +145,7 @@ public async Task CacheBehavior_ThrowOnGet_ThrowAsync() var remote = Substitute.For(); remote.GetAsync(Arg.Any()).ThrowsAsync(new Exception("test")); var behavior = GetBehavior, string>( - new List() { remote }, + [remote], o => o.ThrowIfFailedOnGet = true); // Act @@ -156,7 +156,7 @@ public async Task CacheBehavior_ThrowOnGet_ThrowAsync() RemoteCacheBehavior = CacheBehavior.UpdateCacheIfMiss, RemoteExpires = TimeSpan.FromSeconds(1) }, - () => Task.FromResult("noCache"), + _ => Task.FromResult("noCache"), CancellationToken.None); // Assert @@ -170,7 +170,7 @@ public async Task CacheBehavior_ThrowOnGet_NoThrowAsync() var remote = Substitute.For(); remote.GetAsync(Arg.Any()).ThrowsAsync(new Exception("test")); var behavior = GetBehavior, string>( - new List() { remote }, + [remote], o => o.ThrowIfFailedOnGet = false); // Act @@ -181,7 +181,7 @@ public async Task CacheBehavior_ThrowOnGet_NoThrowAsync() RemoteCacheBehavior = CacheBehavior.UpdateCacheIfMiss, RemoteExpires = TimeSpan.FromSeconds(1) }, - () => Task.FromResult("noCache"), + _ => Task.FromResult("noCache"), CancellationToken.None); // Assert @@ -196,7 +196,7 @@ public async Task CacheBehavior_ThrowOnUpdate_ThrowAsync() remote.UpdateAsync(Arg.Any(), Arg.Any(), Arg.Any()) .ThrowsAsync(new Exception("test")); var behavior = GetBehavior, string>( - new List { remote }, + [remote], o => o.ThrowIfFailedOnUpdate = true); // Act @@ -207,7 +207,7 @@ public async Task CacheBehavior_ThrowOnUpdate_ThrowAsync() RemoteCacheBehavior = CacheBehavior.UpdateCacheIfMiss, RemoteExpires = TimeSpan.FromSeconds(1) }, - () => Task.FromResult("noCache"), + _ => Task.FromResult("noCache"), CancellationToken.None); // Assert @@ -222,7 +222,7 @@ public async Task CacheBehavior_NotThrowOnUpdate_NotThrowAsync() remote.UpdateAsync(Arg.Any(), Arg.Any(), Arg.Any()) .ThrowsAsync(new Exception("test")); var behavior = GetBehavior, string>( - new List { remote }, + [remote], o => o.ThrowIfFailedOnUpdate = false); // Act @@ -233,7 +233,7 @@ public async Task CacheBehavior_NotThrowOnUpdate_NotThrowAsync() RemoteCacheBehavior = CacheBehavior.UpdateCacheIfMiss, RemoteExpires = TimeSpan.FromSeconds(1) }, - () => Task.FromResult("noCache"), + _ => Task.FromResult("noCache"), CancellationToken.None); // Assert @@ -244,7 +244,7 @@ public async Task CacheBehavior_NotThrowOnUpdate_NotThrowAsync() public void CacheBehavior_NoProvider_Throw() { // Act - var act = () => GetBehavior, string>(new List()); + var act = () => GetBehavior, string>([]); // Assert act.Should().Throw(); diff --git a/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/LoggerBehaviorTests.cs b/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/LoggerBehaviorTests.cs index 292254c..f487c84 100644 --- a/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/LoggerBehaviorTests.cs +++ b/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/LoggerBehaviorTests.cs @@ -18,7 +18,7 @@ public async Task LoggerBehavior_ShouldLogDebugAsync() var request = new FakeQuery(null, "test"); // Act - await behavior.Handle(request, () => Task.FromResult("done"), default); + await behavior.Handle(request, _ => Task.FromResult("done"), CancellationToken.None); // Assert logger.Received(2).Log( diff --git a/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/ValidationBehaviorTests.cs b/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/ValidationBehaviorTests.cs index 5c9a8cd..841117c 100644 --- a/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/ValidationBehaviorTests.cs +++ b/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/ValidationBehaviorTests.cs @@ -17,7 +17,7 @@ public async Task ValidationBehavior_ValidationFailed_ReturnObjectAsync() NullLogger, FakeResponse>>.Instance); // Act - var result = await behavior.Handle(request, () => Task.FromResult(new FakeResponse()), default); + var result = await behavior.Handle(request, _ => Task.FromResult(new FakeResponse()), CancellationToken.None); // Assert var errors = new ValidationErrors { error }; @@ -33,7 +33,7 @@ public async Task ValidationBehavior_ValidationSuccess_ReturnNextAsync() NullLogger, FakeResponse>>.Instance); // Act - var result = await behavior.Handle(request, () => Task.FromResult(new FakeResponse()), default); + var result = await behavior.Handle(request, _ => Task.FromResult(new FakeResponse()), CancellationToken.None); // Assert result.Should().BeEquivalentTo(new { IsValidationError = false, ValidationErrors = new ValidationErrors() }); diff --git a/test/Cnblogs.Architecture.UnitTests/Infrastructure/EntityFramework/BaseRepositoryTests.cs b/test/Cnblogs.Architecture.UnitTests/Infrastructure/EntityFramework/BaseRepositoryTests.cs index f88c77c..bd412e1 100644 --- a/test/Cnblogs.Architecture.UnitTests/Infrastructure/EntityFramework/BaseRepositoryTests.cs +++ b/test/Cnblogs.Architecture.UnitTests/Infrastructure/EntityFramework/BaseRepositoryTests.cs @@ -34,7 +34,7 @@ public async Task GetEntityAsync_Include_GetEntityAsync() // Assert got.Should().NotBeNull(); - got!.Posts.Should().BeEquivalentTo(entity.Posts); + got.Posts.Should().BeEquivalentTo(entity.Posts); } [Fact] @@ -60,7 +60,7 @@ public async Task GetEntityAsync_StringBasedInclude_NotNullAsync() // Assert got.Should().NotBeNull(); - got!.Posts.Should().BeEquivalentTo(entity.Posts); + got.Posts.Should().BeEquivalentTo(entity.Posts); } [Fact] @@ -87,7 +87,7 @@ public async Task GetEntityAsync_ThenInclude_NotNullAsync() // Assert got.Should().NotBeNull(); - got!.Posts.Should().BeEquivalentTo(entity.Posts); + got.Posts.Should().BeEquivalentTo(entity.Posts); } [Fact]