Skip to content

Commit 50e94c2

Browse files
committedFeb 14, 2023
feat: translate xml document of Cnblogs.Architecture.Ddd.Cqrs.Abstractions
1 parent c1b9c5b commit 50e94c2

38 files changed

+218
-186
lines changed
 

‎Cnblogs.Architecture.sln.DotSettings

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
2+
<s:Boolean x:Key="/Default/UserDictionary/Words/=cachable/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

‎Directory.Build.props

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
<Product>Cnblogs.Architecture</Product>
99
<PackageProjectUrl>https://github.com/cnblogs/Architecture</PackageProjectUrl>
1010
<PackageLicenseExpression>MIT</PackageLicenseExpression>
11+
<RepositoryUrl>https://github.com/cnblogs/Architecture</RepositoryUrl>
12+
<RepositoryType>git</RepositoryType>
1113
</PropertyGroup>
1214

1315
<ItemGroup>
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22

33
/// <summary>
4-
/// 缓存行为定义。
4+
/// Options for handing <see cref="ICachableRequest"/>.
55
/// </summary>
66
public enum CacheBehavior
77
{
88
/// <summary>
9-
/// 不存在时获取新的。
9+
/// Update cache after cache missed, this is the default behavior.
1010
/// </summary>
1111
UpdateCacheIfMiss = 1,
1212

1313
/// <summary>
14-
/// 不使用缓存。
14+
/// Do not cache this request.
1515
/// </summary>
1616
DisabledCache = 2
1717
}

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestBehavior.cs

+9-9
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
1010

1111
/// <summary>
12-
/// 对实现了 <see cref="ICacheableRequest" /> 的请求进行处理。
12+
/// Handler for <see cref="ICachableRequest" />.
1313
/// </summary>
14-
/// <typeparam name="TRequest">实现了 <see cref="ICacheableRequest" /> 的请求。</typeparam>
15-
/// <typeparam name="TResponse"><typeparamref name="TRequest" /> 请求的结果。</typeparam>
14+
/// <typeparam name="TRequest">Request that implements <see cref="ICachableRequest" />.</typeparam>
15+
/// <typeparam name="TResponse">Cached result for <typeparamref name="TRequest" />.</typeparam>
1616
public class CacheableRequestBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
17-
where TRequest : ICacheableRequest, IRequest<TResponse>
17+
where TRequest : ICachableRequest, IRequest<TResponse>
1818
{
1919
private readonly IDateTimeProvider _dateTimeProvider;
2020
private readonly ILocalCacheProvider? _local;
@@ -23,12 +23,12 @@ public class CacheableRequestBehavior<TRequest, TResponse> : IPipelineBehavior<T
2323
private readonly ILogger<CacheableRequestBehavior<TRequest, TResponse>> _logger;
2424

2525
/// <summary>
26-
/// 构建一个 <see cref="CacheableRequestBehavior{TRequest,TResponse}" />
26+
/// Create <see cref="CacheableRequestBehavior{TRequest,TResponse}" />.
2727
/// </summary>
28-
/// <param name="providers">缓存提供器。</param>
29-
/// <param name="dateTimeProvider">时间提供器。</param>
30-
/// <param name="options">缓存配置项。</param>
31-
/// <param name="logger">日志记录器。</param>
28+
/// <param name="providers">Cache providers.</param>
29+
/// <param name="dateTimeProvider">Datetime provider.</param>
30+
/// <param name="options">Options for cache behavior.</param>
31+
/// <param name="logger">logger.</param>
3232
public CacheableRequestBehavior(
3333
IEnumerable<ICacheProvider> providers,
3434
IDateTimeProvider dateTimeProvider,
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22

33
/// <summary>
4-
/// 缓存配置。
4+
/// Options for handling <see cref="ICachableRequest"/>.
55
/// </summary>
66
public class CacheableRequestOptions
77
{
88
/// <summary>
9-
/// 如果获取失败抛出异常。
9+
/// Rethrow exception if getting cached result failed.
1010
/// </summary>
1111
public bool ThrowIfFailedOnGet { get; set; }
1212

1313
/// <summary>
14-
/// 如果更新失败则抛出异常。
14+
/// Rethrow exception if updating cache failed.
1515
/// </summary>
1616
public bool ThrowIfFailedOnUpdate { get; set; }
1717

1818
/// <summary>
19-
/// 如果清除缓存失败则抛出异常,可能被 <see cref="InvalidCacheRequest"/> 中的 <see cref="InvalidCacheRequest.ThrowIfFailed"/> 覆盖。
19+
/// Rethrow exception if removing cache failed, this option can be overriden by <see cref="InvalidCacheRequest.ThrowIfFailed"/> for specific type of request.
2020
/// </summary>
2121
public bool ThrowIfFailedOnRemove { get; set; }
2222
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

3-
<ItemGroup>
4-
<ProjectReference Include="..\Cnblogs.Architecture.Ddd.Infrastructure.Abstractions\Cnblogs.Architecture.Ddd.Infrastructure.Abstractions.csproj" />
5-
</ItemGroup>
6-
7-
<ItemGroup>
8-
<PackageReference Include="Mapster" Version="7.3.0" />
9-
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
10-
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
11-
</ItemGroup>
3+
<PropertyGroup>
4+
<Description>
5+
Provides building blocks to archive CQRS pattern, including ICommand, IQuery, IPageableQuery, etc.
6+
</Description>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<ProjectReference Include="..\Cnblogs.Architecture.Ddd.Infrastructure.Abstractions\Cnblogs.Architecture.Ddd.Infrastructure.Abstractions.csproj"/>
11+
</ItemGroup>
12+
13+
<ItemGroup>
14+
<PackageReference Include="Mapster" Version="7.3.0"/>
15+
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0"/>
16+
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0"/>
17+
</ItemGroup>
1218

1319
</Project>

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CommandResponse.cs

+42-36
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,26 @@
33
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
44

55
/// <summary>
6-
/// 命令返回的结果。
6+
/// Response returned by <see cref="ICommand{TError}"/>.
77
/// </summary>
88
public abstract record CommandResponse : IValidationResponse, ILockableResponse
99
{
1010
/// <summary>
11-
/// 是否出现验证错误。
11+
/// Check if validation fails.
1212
/// </summary>
1313
public bool IsValidationError { get; init; }
1414

1515
/// <summary>
16-
/// 是否出现并发错误。
16+
/// Check if concurrent error happened.
1717
/// </summary>
1818
public bool IsConcurrentError { get; init; }
1919

2020
/// <summary>
21-
/// 错误信息。
21+
/// The error message returned by handler, return empty if no error or no error message.
2222
/// </summary>
23+
/// <remarks>
24+
/// Do not rely on this property to determine if executed successful, use <see cref="IsSuccess"/> for this purpose.
25+
/// </remarks>
2326
public string ErrorMessage { get; init; } = string.Empty;
2427

2528
/// <inheritdoc />
@@ -29,55 +32,55 @@ public abstract record CommandResponse : IValidationResponse, ILockableResponse
2932
public bool LockAcquired { get; set; }
3033

3134
/// <summary>
32-
/// 执行是否成功。
35+
/// Check if command executed successfully.
3336
/// </summary>
34-
/// <returns></returns>
37+
/// <returns>Return true if executed successfully, else return false.</returns>
3538
public virtual bool IsSuccess()
3639
{
3740
return IsValidationError == false && string.IsNullOrEmpty(ErrorMessage) && IsConcurrentError == false;
3841
}
3942

4043
/// <summary>
41-
/// 获取错误信息。
44+
/// Get error message.
4245
/// </summary>
43-
/// <returns></returns>
46+
/// <returns>The error message, return <see cref="string.Empty"/> if no error.</returns>
4447
public virtual string GetErrorMessage() => ErrorMessage;
4548
}
4649

4750
/// <summary>
48-
/// 命令返回的结果。
51+
/// Response returned by <see cref="ICommand{TError}"/>.
4952
/// </summary>
50-
/// <typeparam name="TError">错误枚举类型。</typeparam>
53+
/// <typeparam name="TError">The enumeration presenting errors.</typeparam>
5154
public record CommandResponse<TError> : CommandResponse
5255
where TError : Enumeration
5356
{
5457
/// <summary>
55-
/// 构造一个 <see cref="CommandResponse{TError}" />
58+
/// Create a successful <see cref="CommandResponse{TError}" />.
5659
/// </summary>
5760
public CommandResponse()
5861
{
5962
ErrorCode = default;
6063
}
6164

6265
/// <summary>
63-
/// 构造一个 <see cref="CommandResponse{TError}" />
66+
/// Create a <see cref="CommandResponse{TError}" /> with given error.
6467
/// </summary>
65-
/// <param name="errorCode">错误码。</param>
68+
/// <param name="errorCode">The error.</param>
6669
public CommandResponse(TError errorCode)
6770
{
6871
ErrorCode = errorCode;
6972
}
7073

7174
/// <summary>
72-
/// 错误码。
75+
/// The error returned by handler, can be null if execution succeeded.
7376
/// </summary>
7477
public TError? ErrorCode { get; set; }
7578

7679
/// <summary>
77-
/// 构造一个代表命令执行失败的 <see cref="CommandResponse{TError}" />
80+
/// Create a failed <see cref="CommandResponse{TError}" /> with given error.
7881
/// </summary>
79-
/// <param name="errorCode">错误码。</param>
80-
/// <returns>代表命令执行失败的 <see cref="CommandResponse{TError}" /></returns>
82+
/// <param name="errorCode">The error.</param>
83+
/// <returns>A failed <see cref="CommandResponse{TError}" /> with given error.</returns>
8184
public static CommandResponse<TError> Fail(TError errorCode)
8285
{
8386
return new CommandResponse<TError>(errorCode);
@@ -96,77 +99,80 @@ public override string GetErrorMessage()
9699
}
97100

98101
/// <summary>
99-
/// 构造一个代表命令执行成功的 <see cref="CommandResponse{TError}" />
102+
/// Create a successful <see cref="CommandResponse{TError}" />.
100103
/// </summary>
101-
/// <returns>代表命令执行成功的 <see cref="CommandResponse{TError}" /></returns>
104+
/// <returns>A successful <see cref="CommandResponse{TError}" />.</returns>
102105
public static CommandResponse<TError> Success()
103106
{
104107
return new CommandResponse<TError>();
105108
}
106109
}
107110

108111
/// <summary>
109-
/// 命令返回的结果。
112+
/// Response returned by <see cref="ICommand{TError}"/>.
110113
/// </summary>
111-
/// <typeparam name="TView">命令执行成功时返回的结果类型。</typeparam>
112-
/// <typeparam name="TError">错误类型。</typeparam>
114+
/// <typeparam name="TView">The model type been returned if execution completed without error.</typeparam>
115+
/// <typeparam name="TError">The enumeration type representing errors.</typeparam>
113116
public record CommandResponse<TView, TError> : CommandResponse<TError>, IObjectResponse
114117
where TError : Enumeration
115118
{
116119
/// <summary>
117-
/// 构造一个 <see cref="CommandResponse{TView,TError}" />
120+
/// Create a <see cref="CommandResponse{TView,TError}" />.
118121
/// </summary>
119122
public CommandResponse()
120123
{
121124
}
122125

123126
/// <summary>
124-
/// 构造一个 <see cref="CommandResponse{TError}" />
127+
/// Create a <see cref="CommandResponse{TError}" /> with given error.
125128
/// </summary>
126-
/// <param name="errorCode">错误码。</param>
129+
/// <param name="errorCode">The error.</param>
127130
public CommandResponse(TError errorCode)
128131
: base(errorCode)
129132
{
130133
}
131134

132135
/// <summary>
133-
/// 构造一个 <see cref="CommandResponse{TError}" />
136+
/// Create a <see cref="CommandResponse{TError}" /> with given model.
134137
/// </summary>
135-
/// <param name="response">命令返回结果。</param>
138+
/// <param name="response">The execution result.</param>
136139
private CommandResponse(TView response)
137140
{
138141
Response = response;
139142
}
140143

141144
/// <summary>
142-
/// 命令执行结果。
145+
/// The result been returned by command handler.
143146
/// </summary>
147+
/// <remarks>
148+
/// This property can be null even if execution completed with no error.
149+
/// </remarks>
144150
public TView? Response { get; }
145151

146152
/// <summary>
147-
/// 构造一个代表执行失败的 <see cref="CommandResponse{TView,TError}" />
153+
/// Create a <see cref="CommandResponse{TView,TError}" /> with given error.
148154
/// </summary>
149-
/// <param name="errorCode">错误码。</param>
150-
/// <returns></returns>
155+
/// <param name="errorCode">The error.</param>
156+
/// <returns>A <see cref="CommandResponse{TView, TError}"/> with given error.</returns>
151157
public static new CommandResponse<TView, TError> Fail(TError errorCode)
152158
{
153159
return new CommandResponse<TView, TError>(errorCode);
154160
}
155161

156162
/// <summary>
157-
/// 构造一个代表执行成功的 <see cref="CommandResponse{TView,TError}" />
163+
/// Create a <see cref="CommandResponse{TView,TError}" /> with no result nor error.
158164
/// </summary>
159-
/// <returns>代表执行成功的 <see cref="CommandResponse{TView,TError}" />。</returns>
165+
/// <returns>The <see cref="CommandResponse{TView,TError}" />。</returns>
160166
public static new CommandResponse<TView, TError> Success()
161167
{
162168
return new CommandResponse<TView, TError>();
163169
}
164170

165171
/// <summary>
166-
/// 构造一个代表执行成功的 <see cref="CommandResponse{TView,TError}" />
172+
/// Create a <see cref="CommandResponse{TView,TError}" /> with given result.
167173
/// </summary>
168-
/// <param name="view">执行结果。</param>
169-
/// <returns></returns>
174+
/// <param name="view">The model to return.</param>
175+
/// <returns>A <see cref="CommandResponse{TView, TError}"/> with given result.</returns>
170176
public static CommandResponse<TView, TError> Success(TView view)
171177
{
172178
return new CommandResponse<TView, TError>(view);
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,48 @@
11
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22

33
/// <summary>
4-
/// 定义可缓存的请求
4+
/// Definition for cachable request.
55
/// </summary>
6-
public interface ICacheableRequest
6+
public interface ICachableRequest
77
{
88
/// <summary>
9-
/// 本地缓存配置。
9+
/// Configuration for local cache provider.
1010
/// </summary>
1111
CacheBehavior LocalCacheBehavior { get; set; }
1212

1313
/// <summary>
14-
/// 远程缓存配置。
14+
/// Configuration for remote cache provider.
1515
/// </summary>
1616
CacheBehavior RemoteCacheBehavior { get; set; }
1717

1818
/// <summary>
19-
/// 本地缓存过期时间。
19+
/// The expire time for local cache.
2020
/// </summary>
2121
TimeSpan? LocalExpires { get; set; }
2222

2323
/// <summary>
24-
/// 远程缓存过期时间。
24+
/// The expire time for remote cache.
2525
/// </summary>
2626
TimeSpan? RemoteExpires { get; set; }
2727

2828
/// <summary>
29-
/// 获取缓存分组键,<c>null</c> 代表不分组。
29+
/// Generate key for cache group, return <c>null</c> for no group.
3030
/// </summary>
3131
/// <returns></returns>
3232
string? CacheGroupKey();
3333

3434
/// <summary>
35-
/// 获取缓存键。
35+
/// Generate cache key for each request.
3636
/// </summary>
37-
/// <returns></returns>
37+
/// <returns>The cache key for current request.</returns>
3838
string CacheKey()
3939
{
4040
return string.Join('-', GetCacheKeyParameters().Select(p => p?.ToString()?.ToLower()));
4141
}
4242

4343
/// <summary>
44-
/// 获取组成缓存键的参数。
44+
/// Get parameters for generating cache key, will call <see cref="object.ToString"/> to each object been provided.
4545
/// </summary>
46-
/// <returns></returns>
46+
/// <returns>The parameter array.</returns>
4747
object?[] GetCacheKeyParameters();
4848
}

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommand.Generic.cs

+7-4
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,18 @@
55
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
66

77
/// <summary>
8-
/// 定义 CQRS 中的命令相关的行为。
8+
/// Definitions of command in CQRS.
99
/// </summary>
10-
/// <typeparam name="TView">命令执行成功时返回的结果。</typeparam>
11-
/// <typeparam name="TError">命令失败时返回的错误码类型。</typeparam>
10+
/// <typeparam name="TView">The result type for command.</typeparam>
11+
/// <typeparam name="TError">The error code type when command failed.</typeparam>
1212
public interface ICommand<TView, TError> : IRequest<CommandResponse<TView, TError>>
1313
where TError : Enumeration
1414
{
1515
/// <summary>
16-
/// 命令是否只进行验证。
16+
/// Only execute validation logic.
1717
/// </summary>
18+
/// <remarks>
19+
/// This logic must be implemented manually in command handler and not guaranteed by framework.
20+
/// </remarks>
1821
public bool ValidateOnly { get; }
1922
}

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommand.cs

+6-3
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@
55
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
66

77
/// <summary>
8-
/// 定义 CQRS 中的命令相关的行为。
8+
/// Definition for command.
99
/// </summary>
10-
/// <typeparam name="TError">命令失败时返回的错误码类型。</typeparam>
10+
/// <typeparam name="TError">The error type when command execution failed.</typeparam>
1111
public interface ICommand<TError> : IRequest<CommandResponse<TError>>
1212
where TError : Enumeration
1313
{
1414
/// <summary>
15-
/// 命令是否只执行验证。
15+
/// Only execute validation logic.
1616
/// </summary>
17+
/// <remarks>
18+
/// This logic must be implemented manually in command handler and not guaranteed by framework.
19+
/// </remarks>
1720
public bool ValidateOnly { get; }
1821
}

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommandHandler.Generic.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
66

77
/// <summary>
8-
/// 定义 <see cref="ICommand{TError}" /> 的实际处理逻辑
8+
/// Definitions of handler that handles <see cref="ICommand{TView, TError}" />。
99
/// </summary>
10-
/// <typeparam name="TCommand">该 Handler 能够处理的命令类型。</typeparam>
11-
/// <typeparam name="TView">命令返回的结果类型。</typeparam>
12-
/// <typeparam name="TError">该 Handler 返回的错误码类型。</typeparam>
10+
/// <typeparam name="TCommand">The command type for this handler.</typeparam>
11+
/// <typeparam name="TView">The result type for this handler.</typeparam>
12+
/// <typeparam name="TError">The error type for this handler.</typeparam>
1313
public interface ICommandHandler<TCommand, TView, TError> : IRequestHandler<TCommand, CommandResponse<TView, TError>>
1414
where TCommand : ICommand<TView, TError>
1515
where TError : Enumeration

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommandHandler.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
66

77
/// <summary>
8-
/// 定义 <see cref="ICommand{TError}" /> 的实际处理逻辑。
8+
/// Definitions of handler that handles <see cref="ICommand{TError}" />.
99
/// </summary>
10-
/// <typeparam name="TCommand">该 Handler 能够处理的命令类型。</typeparam>
11-
/// <typeparam name="TError">该 Handler 返回的错误码类型。</typeparam>
10+
/// <typeparam name="TCommand">The command type for this handler.</typeparam>
11+
/// <typeparam name="TError">The error type for this handler.</typeparam>
1212
public interface ICommandHandler<TCommand, TError> : IRequestHandler<TCommand, CommandResponse<TError>>
1313
where TCommand : ICommand<TError>
1414
where TError : Enumeration
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22

33
/// <summary>
4-
/// 可配置的分布式锁请求。
4+
/// Definitions of a <see cref="ILockableRequest"/> with some configurations.
55
/// </summary>
66
public interface IConfigurableLockableRequest : ILockableRequest
77
{
88
/// <summary>
9-
/// 锁过期时间。
9+
/// The maximum waiting time for requiring a lock.
1010
/// </summary>
1111
TimeSpan ExpiresIn { get; }
1212
}

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IDomainEventHandler.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
66

77
/// <summary>
8-
/// 领域事件处理器。
8+
/// Definitions of handler for <see cref="DomainEvent"/>.
99
/// </summary>
10-
/// <typeparam name="TDomainEvent">要订阅的领域事件。</typeparam>
10+
/// <typeparam name="TDomainEvent">The domain event type for this handler to handle.</typeparam>
1111
public interface IDomainEventHandler<TDomainEvent> : INotificationHandler<TDomainEvent>
1212
where TDomainEvent : DomainEvent
1313
{

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IListQuery.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
44

55
/// <summary>
6-
/// 定义返回多个结果的查询。
6+
/// Represents a query returns a list of items.
77
/// </summary>
8-
/// <typeparam name="TList">查询结果类型,通常是一个列表类型。</typeparam>
8+
/// <typeparam name="TList">The list to return, usually a <see cref="List{T}"/>.</typeparam>
99
public interface IListQuery<TList> : IRequest<TList>
1010
{
1111
}

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IListQueryHandler.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
44

55
/// <summary>
6-
/// 定义 <see cref="IListQuery{TList}" /> 的处理逻辑。
6+
/// Represents a handler for <see cref="IListQuery{TList}" />.
77
/// </summary>
8-
/// <typeparam name="TQuery">该 Handler 能够处理的 <see cref="IListQuery{TList}" /> 类型。</typeparam>
9-
/// <typeparam name="TList">查询结果类型。</typeparam>
8+
/// <typeparam name="TQuery">The <see cref="IListQuery{TList}" /> been handled.</typeparam>
9+
/// <typeparam name="TList">The result type of <typeparamref name="TQuery"/>.</typeparam>
1010
public interface IListQueryHandler<TQuery, TList> : IRequestHandler<TQuery, TList>
1111
where TQuery : IListQuery<TList>
1212
{
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22

33
/// <summary>
4-
/// 定义需要分布式锁的请求
4+
/// Represents a request that needs distributed locks.
55
/// </summary>
66
public interface ILockableRequest
77
{
88
/// <summary>
9-
/// 获取锁的 Key。
9+
/// Get the key of distributed lock.
1010
/// </summary>
11-
/// <returns></returns>
11+
/// <returns>The key of distributed lock.</returns>
1212
string GetLockKey();
1313
}
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22

33
/// <summary>
4-
/// 使用分布式锁后的响应。
4+
/// Represents response for <see cref="ILockableRequest"/>.
55
/// </summary>
66
public interface ILockableResponse
77
{
88
/// <summary>
9-
/// 是否出现并发错误(获取不到锁)
9+
/// Indicates whether lock was required successfully.
1010
/// </summary>
1111
bool IsConcurrentError { get; init; }
1212

1313
/// <summary>
14-
/// 是否成功获取到锁。
14+
/// Indicates whether lock was required.
1515
/// </summary>
1616
bool LockAcquired { get; set; }
1717
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22

33
/// <summary>
4-
/// 包含结果对象的响应。
4+
/// Represents response that contains object result.
55
/// </summary>
66
public interface IObjectResponse
77
{
88
/// <summary>
9-
/// 获取结果。
9+
/// Get object result.
1010
/// </summary>
11-
/// <returns>结果。</returns>
11+
/// <returns>The resulting object.</returns>
1212
public object? GetResult();
1313
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22

33
/// <summary>
4-
/// 定义返回已排序的多个结果的查询。
4+
/// Represents a <see cref="IListQuery{TList}"/> with ordered results.
55
/// </summary>
6-
/// <typeparam name="TList">查询结果类型,通常是列表类型。</typeparam>
6+
/// <typeparam name="TList">The querying type, usually a list type.</typeparam>
77
public interface IOrderedQuery<TList> : IListQuery<TList>
88
{
99
/// <summary>
10-
/// 排序字符串。
10+
/// The string indicates the order.
1111
/// </summary>
12+
/// <example>Order by string can be like "-dateadded"(order by dateadded desc) or "id"(order by id asc).</example>
1213
string? OrderByString { get; }
1314
}

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IPageableQuery.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
44

55
/// <summary>
6-
/// 定义返回分页结果的查询类型。
6+
/// Represents a <see cref="IOrderedQuery{TList}"/> with paged results.
77
/// </summary>
8-
/// <typeparam name="TElement">单个查询结果的类型。</typeparam>
8+
/// <typeparam name="TElement">The type for each item in results.</typeparam>
99
public interface IPageableQuery<TElement> : IOrderedQuery<PagedList<TElement>>
1010
{
1111
/// <summary>
12-
/// 分页参数。
12+
/// The paging parameters, include page index and page size.
1313
/// </summary>
1414
PagingParams? PagingParams { get; }
1515
}

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IPageableQueryHandler.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
44

55
/// <summary>
6-
/// 定义处理分页查询的逻辑。
6+
/// Represents the handler for <see cref="IPageableQuery{TElement}" />.
77
/// </summary>
8-
/// <typeparam name="TQuery">查询类型,需要继承 <see cref="IPageableQuery{TElement}" /></typeparam>
9-
/// <typeparam name="TView">单个查询结果类型,将返回 IPagedList&lt;TView&gt;。</typeparam>
8+
/// <typeparam name="TQuery">The <see cref="IPageableQuery{TElement}" /> to handle.</typeparam>
9+
/// <typeparam name="TView">The type for each item in <see cref="PagedList{T}"/>.</typeparam>
1010
public interface IPageableQueryHandler<TQuery, TView> : IListQueryHandler<TQuery, PagedList<TView>>
1111
where TQuery : IPageableQuery<TView>
1212
{

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IQuery.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
44

55
/// <summary>
6-
/// 定义获取单个结果的查询。
6+
/// Represents query for single item.
77
/// </summary>
8-
/// <typeparam name="TView">结果类型。</typeparam>
8+
/// <typeparam name="TView">The type of item to query.</typeparam>
99
public interface IQuery<TView> : IRequest<TView?>
1010
{
1111
}

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IQueryHandler.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
44

55
/// <summary>
6-
/// 定义处理 <see cref="IQuery{TView}" /> 的逻辑。
6+
/// Represents handler that handles <see cref="IQuery{TView}"/>.
77
/// </summary>
8-
/// <typeparam name="TQuery">查询类型,需要继承 <see cref="IQuery{TView}" /></typeparam>
9-
/// <typeparam name="TView">结果类型。</typeparam>
8+
/// <typeparam name="TQuery">The <see cref="IQuery{TView}" /> type to handle.</typeparam>
9+
/// <typeparam name="TView">The type of item to query.</typeparam>
1010
public interface IQueryHandler<TQuery, TView> : IRequestHandler<TQuery, TView?>
1111
where TQuery : IQuery<TView>
1212
{
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22

33
/// <summary>
4-
/// 定义可验证的类型。
4+
/// Represents a request that can be validated.
55
/// </summary>
66
public interface IValidatable
77
{
88
/// <summary>
9-
/// 验证方法,出错时返回 <see cref="ValidationError"/>,否则返回 <code>null</code>
9+
/// Validate the object, return <see cref="ValidationError"/> if fails or <code>null</code> if passed.
1010
/// </summary>
1111
ValidationError? Validate();
1212
}
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22

33
/// <summary>
4-
/// <see cref="IValidatable" /> 的返回类型。
4+
/// Represents response for <see cref="IValidatable" />.
55
/// </summary>
66
public interface IValidationResponse
77
{
88
/// <summary>
9-
/// 验证是否失败。
9+
/// Indicates whether validation is failed.
1010
/// </summary>
1111
bool IsValidationError { get; init; }
1212

1313
/// <summary>
14-
/// 错误信息。
14+
/// Contain error message if validation fails.
1515
/// </summary>
1616
string ErrorMessage { get; init; }
1717

1818
/// <summary>
19-
/// 错误信息对象。
19+
/// The validation results, null if validation was passed.
2020
/// </summary>
2121
ValidationError? ValidationError { get; init; }
2222
}

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/InvalidCacheRequest.cs

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
44

55
/// <summary>
6-
/// 清除缓存请求。
6+
/// Represents request to invalid caches.
77
/// </summary>
8+
/// <param name="Request">The request that been cached.</param>
9+
/// <param name="InvalidWholeGroup">Invalid cache for the group that <paramref name="Request"/> was in.</param>
10+
/// <param name="ThrowIfFailed">Throw exceptions if fails, overrides same options in <see cref="CacheableRequestOptions"/>.</param>
811
public record InvalidCacheRequest(
9-
ICacheableRequest Request,
12+
ICachableRequest Request,
1013
bool InvalidWholeGroup = false,
1114
bool? ThrowIfFailed = null) : IRequest;

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/InvalidCacheRequestHandler.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
1010

1111
/// <summary>
12-
/// 清除缓存。
12+
/// The default handler for <see cref="InvalidCacheRequest"/>.
1313
/// </summary>
1414
public class InvalidCacheRequestHandler : IRequestHandler<InvalidCacheRequest>
1515
{
@@ -20,12 +20,12 @@ public class InvalidCacheRequestHandler : IRequestHandler<InvalidCacheRequest>
2020
private readonly ILogger<InvalidCacheRequestHandler> _logger;
2121

2222
/// <summary>
23-
/// 构建一个 <see cref="CacheableRequestBehavior{TRequest,TResponse}" />
23+
/// Create a <see cref="CacheableRequestBehavior{TRequest,TResponse}" />.
2424
/// </summary>
25-
/// <param name="providers">缓存提供器。</param>
26-
/// <param name="dateTimeProvider">时间提供器。</param>
27-
/// <param name="options">缓存配置。</param>
28-
/// <param name="logger">日志记录器。</param>
25+
/// <param name="providers">Cache providers.</param>
26+
/// <param name="dateTimeProvider">Datetime providers.</param>
27+
/// <param name="options">Cache options.</param>
28+
/// <param name="logger">log provider.</param>
2929
public InvalidCacheRequestHandler(
3030
IEnumerable<ICacheProvider> providers,
3131
IDateTimeProvider dateTimeProvider,

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/LockableRequestBehavior.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
88

99
/// <summary>
10-
/// 处理需要分布式锁的请求。
10+
/// Handle requests that require distributed lock.
1111
/// </summary>
12-
/// <typeparam name="TRequest">请求类型。</typeparam>
13-
/// <typeparam name="TResponse">响应类型。</typeparam>
12+
/// <typeparam name="TRequest">The type of request.</typeparam>
13+
/// <typeparam name="TResponse">The type of response.</typeparam>
1414
public class LockableRequestBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
1515
where TRequest : ILockableRequest, IRequest<TResponse>
1616
where TResponse : ILockableResponse, new()
@@ -19,10 +19,10 @@ public class LockableRequestBehavior<TRequest, TResponse> : IPipelineBehavior<TR
1919
private readonly ILogger<LockableRequestBehavior<TRequest, TResponse>> _logger;
2020

2121
/// <summary>
22-
/// 创建一个新的 <see cref="LockableRequestBehavior{TRequest, TResponse}" /> 实例。
22+
/// Create a new <see cref="LockableRequestBehavior{TRequest, TResponse}" /> instance.
2323
/// </summary>
24-
/// <param name="distributedLockProvider">分布式锁提供器。</param>
25-
/// <param name="logger">日志记录器。</param>
24+
/// <param name="distributedLockProvider">Distributed lock provider.</param>
25+
/// <param name="logger">log provider.</param>
2626
public LockableRequestBehavior(
2727
IDistributedLockProvider distributedLockProvider,
2828
ILogger<LockableRequestBehavior<TRequest, TResponse>> logger)

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/LoggingBehavior.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@
55
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
66

77
/// <summary>
8-
/// 记录命令/查询日志
8+
/// Middleware for logging requests and events.
99
/// </summary>
10-
/// <typeparam name="TRequest">请求类型。</typeparam>
11-
/// <typeparam name="TResponse">返回类型。</typeparam>
10+
/// <typeparam name="TRequest">The type of request.</typeparam>
11+
/// <typeparam name="TResponse">The type of response.</typeparam>
1212
public class LoggingBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
1313
where TRequest : IRequest<TResponse>
1414
{
1515
private readonly ILogger<LoggingBehavior<TRequest, TResponse>> _logger;
1616

1717
/// <summary>
18-
/// 新建一个 <see cref="LoggingBehavior{TRequest, TResponse}" /> 类型的实例。
18+
/// Create a new <see cref="LoggingBehavior{TRequest, TResponse}" /> instance.
1919
/// </summary>
20-
/// <param name="logger">日志记录器。</param>
20+
/// <param name="logger">Log provider.</param>
2121
public LoggingBehavior(ILogger<LoggingBehavior<TRequest, TResponse>> logger)
2222
{
2323
_logger = logger;

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/PageableQueryHandlerBase.cs

+26-26
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
66

77
/// <summary>
8-
/// 用于实现 <see cref="IPageableQueryHandler{TQuery,TView}" /> 的基类。
8+
/// Base class for implementing <see cref="IPageableQueryHandler{TQuery,TView}" />.
99
/// </summary>
10-
/// <typeparam name="TQuery">查询类型。</typeparam>
11-
/// <typeparam name="TEntity">实体类型。</typeparam>
12-
/// <typeparam name="TView">返回类型。</typeparam>
10+
/// <typeparam name="TQuery">The type of query.</typeparam>
11+
/// <typeparam name="TEntity">The type of entity to query.</typeparam>
12+
/// <typeparam name="TView">The type of projected view model.</typeparam>
1313
public abstract class PageableQueryHandlerBase<TQuery, TEntity, TView> : IPageableQueryHandler<TQuery, TView>
1414
where TQuery : IPageableQuery<TView>
1515
{
@@ -45,54 +45,54 @@ public async Task<PagedList<TView>> Handle(TQuery request, CancellationToken can
4545
}
4646

4747
/// <summary>
48-
/// 获取总数的查询。
48+
/// Query for total count.
4949
/// </summary>
50-
/// <param name="query">查询条件。</param>
51-
/// <param name="queryable">过滤好的 <see cref="IQueryable{T}" /></param>
52-
/// <returns>总数。</returns>
50+
/// <param name="query">The query parameters.</param>
51+
/// <param name="queryable">Filtered <see cref="IQueryable{T}" />.</param>
52+
/// <returns>The total count of items.</returns>
5353
protected abstract Task<int> CountAsync(TQuery query, IQueryable<TEntity> queryable);
5454

5555
/// <summary>
56-
/// 默认的排序条件,如果没有指定 <see cref="OrderBySegment" />,将会使用这一语句。
56+
/// The default order by field, used when <see cref="OrderBySegment" /> is not present.
5757
/// </summary>
58-
/// <param name="query">查询条件。</param>
59-
/// <param name="queryable"><see cref="Filter" />返回的<see cref="IQueryable{TEntity}" /></param>
60-
/// <returns>排序好的 <see cref="IQueryable{T}" /></returns>
58+
/// <param name="query">The query parameters.</param>
59+
/// <param name="queryable"><see cref="IQueryable{TEntity}" /> returned by <see cref="Filter" />.</param>
60+
/// <returns>Ordered <see cref="IQueryable{T}" />.</returns>
6161
protected abstract IQueryable<TEntity> DefaultOrderBy(TQuery query, IQueryable<TEntity> queryable);
6262

6363
/// <summary>
64-
/// 获取并过滤,返回 <see cref="IQueryable{T}" />
64+
/// Create queryable and apply filter, return filtered <see cref="IQueryable{T}" />.
6565
/// </summary>
66-
/// <param name="query">输入的查询条件。</param>
67-
/// <returns>过滤后的 <see cref="IQueryable{T}" /></returns>
66+
/// <param name="query">The query parameter.</param>
67+
/// <returns>Filtered <see cref="IQueryable{T}" />.</returns>
6868
protected abstract IQueryable<TEntity> Filter(TQuery query);
6969

7070
/// <summary>
71-
/// 获取并过滤,返回 <see cref="IQueryable{T}" />
71+
/// Create queryable and apply filter asynchronously, return filtered <see cref="IQueryable{T}" />.
7272
/// </summary>
73-
/// <param name="query">输入的查询条件。</param>
74-
/// <returns>过滤后的 <see cref="IQueryable{T}" /></returns>
73+
/// <param name="query">The query parameter.</param>
74+
/// <returns>Filtered <see cref="IQueryable{T}" />.</returns>
7575
protected virtual Task<IQueryable<TEntity>> FilterAsync(TQuery query)
7676
{
7777
return Task.FromResult(Filter(query));
7878
}
7979

8080
/// <summary>
81-
/// 投射结果,返回 <see cref="IQueryable{TView}" />
81+
/// Project item to view model, return projected <see cref="IQueryable{TView}" />.
8282
/// </summary>
83-
/// <param name="query">查询条件。</param>
84-
/// <param name="queryable">过滤并排序完成的 <see cref="IQueryable{T}" /></param>
85-
/// <returns>投射好的 <see cref="IQueryable" /></returns>
83+
/// <param name="query">The query parameter.</param>
84+
/// <param name="queryable">Filtered and ordered <see cref="IQueryable{T}" />.</param>
85+
/// <returns>Projected <see cref="IQueryable" />.</returns>
8686
protected virtual IQueryable<TView> ProjectToView(TQuery query, IQueryable<TEntity> queryable)
8787
{
8888
return queryable.ProjectToType<TView>();
8989
}
9090

9191
/// <summary>
92-
/// 执行实际的查询。
92+
/// Execute query and projections, get the actual results.
9393
/// </summary>
94-
/// <param name="query">查询条件。</param>
95-
/// <param name="queryable">投射好的 <see cref="IQueryable{T}" /></param>
96-
/// <returns>查询结果。</returns>
94+
/// <param name="query">The query parameter.</param>
95+
/// <param name="queryable">Projected <see cref="IQueryable{T}" />.</param>
96+
/// <returns>The query result.</returns>
9797
protected abstract Task<List<TView>> ToListAsync(TQuery query, IQueryable<TView> queryable);
9898
}

‎src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ValidationBehavior.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
66

77
/// <summary>
8-
/// 对实现了 <see cref="IValidatable" /> 的 <see cref="IRequest" /> 进行验证。
8+
/// Validate requests that implements <see cref="IValidatable" />.
99
/// </summary>
10-
/// <typeparam name="TRequest">请求类型。</typeparam>
11-
/// <typeparam name="TResponse">结果类型。</typeparam>
10+
/// <typeparam name="TRequest">The type of request.</typeparam>
11+
/// <typeparam name="TResponse">The type of response.</typeparam>
1212
public class ValidationBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
1313
where TRequest : IValidatable, IRequest<TResponse>
1414
where TResponse : IValidationResponse, new()
1515
{
1616
private readonly ILogger<ValidationBehavior<TRequest, TResponse>> _logger;
1717

1818
/// <summary>
19-
/// 构造一个 <see cref="ValidationBehavior{TRequest,TResponse}" />
19+
/// Create a new <see cref="ValidationBehavior{TRequest,TResponse}" />.
2020
/// </summary>
21-
/// <param name="logger"></param>
21+
/// <param name="logger">The log provider.</param>
2222
public ValidationBehavior(ILogger<ValidationBehavior<TRequest, TResponse>> logger)
2323
{
2424
_logger = logger;
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
22

33
/// <summary>
4-
/// 验证错误。
4+
/// A Validation error returned by <see cref="IValidatable"/>.
55
/// </summary>
6-
/// <param name="Message">错误信息。</param>
7-
/// <param name="ParameterName">参数名称。</param>
6+
/// <param name="Message">The error message.</param>
7+
/// <param name="ParameterName">The parameter name that failed to validate.</param>
88
public record ValidationError(string Message, string? ParameterName);

‎src/Cnblogs.Architecture.Ddd.Cqrs.DependencyInjection/CqrsInjector.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public CqrsInjector AddDistributionLock<TDistributedLockProvider>()
6565
}
6666

6767
/// <summary>
68-
/// 启用缓存中间件,自动处理和缓存实现了 <see cref="ICacheableRequest" /> 接口的请求。
68+
/// 启用缓存中间件,自动处理和缓存实现了 <see cref="ICachableRequest" /> 接口的请求。
6969
/// </summary>
7070
/// <typeparam name="TLocal">本地缓存提供器。</typeparam>
7171
/// <param name="configure">缓存配置。</param>
@@ -79,7 +79,7 @@ public CqrsInjector AddLocalQueryCache<TLocal>(Action<CacheableRequestOptions>?
7979
}
8080

8181
/// <summary>
82-
/// 启用缓存中间件,自动处理和缓存实现了 <see cref="ICacheableRequest" /> 接口的请求。
82+
/// 启用缓存中间件,自动处理和缓存实现了 <see cref="ICachableRequest" /> 接口的请求。
8383
/// </summary>
8484
/// <typeparam name="TLocal">本地缓存提供器。</typeparam>
8585
/// <typeparam name="TRemote">远程缓存提供器。</typeparam>
@@ -96,7 +96,7 @@ public CqrsInjector AddQueryCache<TLocal, TRemote>(Action<CacheableRequestOption
9696
}
9797

9898
/// <summary>
99-
/// 启用缓存中间件,自动处理和缓存实现了 <see cref="ICacheableRequest" /> 接口的请求。
99+
/// 启用缓存中间件,自动处理和缓存实现了 <see cref="ICachableRequest" /> 接口的请求。
100100
/// </summary>
101101
/// <typeparam name="TRemote">远程缓存提供器。</typeparam>
102102
/// <param name="configure">缓存配置。</param>

‎src/Directory.Build.props

+10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@
44

55
<PropertyGroup>
66
<GenerateDocumentationFile>true</GenerateDocumentationFile>
7+
<PublishRepositoryUrl>true</PublishRepositoryUrl>
8+
<IncludeSymbols>true</IncludeSymbols>
9+
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
10+
<PackageReleaseNotes>
11+
Please check release notes at: https://github.com/cnblogs/Architecture/releases
12+
</PackageReleaseNotes>
713
</PropertyGroup>
14+
15+
<ItemGroup>
16+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All"/>
17+
</ItemGroup>
818

919
</Project>

‎test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs

-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ namespace Cnblogs.Architecture.IntegrationTests;
1010

1111
public class DaprTests
1212
{
13-
public DaprTests()
14-
{
15-
}
16-
1713
[Fact]
1814
public async Task Dapr_SubscribeEndpoint_OkAsync()
1915
{

‎test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/CacheBehaviorTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ public void CacheBehavior_NoProvider_Throw()
251251
private static CacheableRequestBehavior<TRequest, TResponse> GetBehavior<TRequest, TResponse>(
252252
List<ICacheProvider> providers,
253253
Action<CacheableRequestOptions>? optionConfigure = null)
254-
where TRequest : ICacheableRequest, IRequest<TResponse>
254+
where TRequest : ICachableRequest, IRequest<TResponse>
255255
{
256256
var option = new CacheableRequestOptions();
257257
optionConfigure?.Invoke(option);

‎test/Cnblogs.Architecture.UnitTests/Cqrs/FakeObjects/FakeQuery.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Cnblogs.Architecture.UnitTests.Cqrs.FakeObjects;
66

7-
public class FakeQuery<TResponse> : ICacheableRequest, IRequest<TResponse>, IValidatable
7+
public class FakeQuery<TResponse> : ICachableRequest, IRequest<TResponse>, IValidatable
88
{
99
private readonly string? _cacheGroupKey;
1010
private readonly string _cacheKey;

0 commit comments

Comments
 (0)
Please sign in to comment.