Skip to content

Commit 4f50105

Browse files
authored
v5.17.1 (#266)
* v5.17.1 - *Fixed:* The database console `Script` command execution has been updated to output to the correct directory path. * Add global using ExecutionContext in template. * Agent code-gen simplification. * Sample tweak. * *Fixed:* The database code-generation support for replacement is now optional (see new `Replace` property) versus always (defaults to `true`).
1 parent 82d5380 commit 4f50105

File tree

82 files changed

+357
-367
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+357
-367
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
Represents the **NuGet** versions.
44

5+
## v5.17.1
6+
- *Fixed:* The database console `Script` command execution has been updated to output to the correct directory path.
7+
- *Fixed:* The `Agent` code-generation artefacts have been further simplified/improved.
8+
- *Fixed:* The database code-generation support for replacement is now optional (see new `Replace` property) versus always (defaults to `true`).
9+
510
## v5.17.0
611
- *Enhancement:* The `Common`-project related code-generated artefacts have all been updated to leverage `global using` and file scoped namespace declarations.
712
- A new [`GlobalUsings.cs`](./templates/Beef.Template.Solution/content/Company.AppName.Common/GlobalUsings.cs) will need to be manually added to existing `Common` projects to enable; see [this](./templates/Beef.Template.Solution/content/Company.AppName.Common/GlobalUsings.cs) for an example and alter the last two namespaces accordingly.

Common.targets

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<PropertyGroup>
3-
<Version>5.17.0</Version>
3+
<Version>5.17.1</Version>
44
<LangVersion>preview</LangVersion>
55
<Authors>Avanade</Authors>
66
<Company>Avanade</Company>

docs/Database-Query-Config.md

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ Property | Description
4646
**`name`** | The name of the primary table of the query. [Mandatory]
4747
`schema` | The schema name of the primary table of the view.<br/>&dagger; Defaults to `CodeGeneration.Schema`.
4848
`alias` | The `Schema.Table` alias name.<br/>&dagger; Will automatically default where not specified.
49+
`viewReplace` | Indicates whether the existing `View` database object should be replaced/altered or whether the object is dropped and recreated.<br/>&dagger; Defaults to `CodeGeneration.Replace`.
4950

5051
<br/>
5152

docs/Database-StoredProcedure-Config.md

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ Property | Description
6666
**`type`** | The stored procedure operation type. Valid options are: `Get`, `GetColl`, `Create`, `Update`, `Upsert`, `Delete`, `Merge`.<br/>&dagger; Defaults to `GetColl`.
6767
**`paging`** | Indicates whether standardized paging support should be added.<br/>&dagger; This only applies where the stored procedure operation `Type` is `GetColl`.
6868
`storedProcedureName` | The `StoredProcedure` name in the database.<br/>&dagger; Defaults to `sp` + `Table.Name` + `Name`; e.g. `spTableName` or `spPersonGet`.
69+
`replace` | Indicates whether the existing `StoredProcedure` database object should be replaced/altered or whether the object is dropped and recreated.<br/>&dagger; Defaults to `CodeGeneration.Replace`.
6970

7071
<br/>
7172

docs/Database-Table-Config.md

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ Property | Description
6363
**`name`** | The name of the `Table` in the database. [Mandatory]
6464
**`schema`** | The name of the `Schema` where the `Table` is defined in the database.<br/>&dagger; Defaults to `CodeGeneration.Schema`.
6565
`alias` | The `Schema.Table` alias name.<br/>&dagger; Will automatically default where not specified.
66+
`replace` | Indicates whether the existing database object should be replaced/altered or whether the object is dropped and recreated.<br/>&dagger; Defaults to `CodeGeneration.Replace`.
6667

6768
<br/>
6869

samples/Cdr.Banking/Cdr.Banking.Api/Cdr.Banking.Api.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<ImplicitUsings>true</ImplicitUsings>
66
</PropertyGroup>
77
<ItemGroup>
8-
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.1" />
8+
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.3" />
99
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.9.0" />
1010
</ItemGroup>
1111
<ItemGroup>

samples/Cdr.Banking/Cdr.Banking.Business/Cdr.Banking.Business.csproj

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
<Folder Include="DataSvc\" />
1313
</ItemGroup>
1414
<ItemGroup>
15-
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.1" />
16-
<PackageReference Include="CoreEx.Cosmos" Version="3.27.1" />
17-
<PackageReference Include="CoreEx.Validation" Version="3.27.1" />
15+
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.3" />
16+
<PackageReference Include="CoreEx.Cosmos" Version="3.27.3" />
17+
<PackageReference Include="CoreEx.Validation" Version="3.27.3" />
1818
</ItemGroup>
1919
</Project>

samples/Cdr.Banking/Cdr.Banking.Common/Agents/Generated/AccountAgent.cs

+9-14
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,28 @@ namespace Cdr.Banking.Common.Agents;
77
/// <summary>
88
/// Provides the <see cref="Account"/> HTTP agent.
99
/// </summary>
10-
public partial class AccountAgent : TypedHttpClientBase<AccountAgent>, IAccountAgent
10+
/// <param name="client">The underlying <see cref="HttpClient"/>.</param>
11+
/// <param name="jsonSerializer">The optional <see cref="IJsonSerializer"/>.</param>
12+
/// <param name="executionContext">The optional <see cref="CoreEx.ExecutionContext"/>.</param>
13+
public partial class AccountAgent(HttpClient client, IJsonSerializer? jsonSerializer = null, CoreEx.ExecutionContext? executionContext = null) : TypedHttpClientBase<AccountAgent>(client, jsonSerializer, executionContext), IAccountAgent
1114
{
12-
/// <summary>
13-
/// Initializes a new instance of the <see cref="AccountAgent"/> class.
14-
/// </summary>
15-
/// <param name="client">The underlying <see cref="HttpClient"/>.</param>
16-
/// <param name="jsonSerializer">The optional <see cref="IJsonSerializer"/>.</param>
17-
/// <param name="executionContext">The optional <see cref="CoreEx.ExecutionContext"/>.</param>
18-
public AccountAgent(HttpClient client, IJsonSerializer? jsonSerializer = null, CoreEx.ExecutionContext? executionContext = null) : base(client, jsonSerializer, executionContext) { }
19-
2015
/// <inheritdoc/>
2116
public Task<HttpResult<AccountCollectionResult>> GetAccountsAsync(AccountArgs? args, PagingArgs? paging = null, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
22-
=> GetAsync<AccountCollectionResult>("api/v1/banking/accounts", requestOptions: requestOptions.IncludePaging(paging), args: HttpArgs.Create(new HttpArg<AccountArgs?>("args", args, HttpArgType.FromUriUseProperties)), cancellationToken: cancellationToken);
17+
=> GetAsync<AccountCollectionResult>("api/v1/banking/accounts", requestOptions.IncludePaging(paging), [new HttpArg<AccountArgs?>("args", args, HttpArgType.FromUriUseProperties)], cancellationToken);
2318

2419
/// <inheritdoc/>
2520
public Task<HttpResult<AccountCollectionResult>> GetAccountsQueryAsync(QueryArgs? query = null, PagingArgs? paging = null, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
26-
=> GetAsync<AccountCollectionResult>("api/v1/banking/accounts/query", requestOptions: requestOptions.IncludeQuery(query).IncludePaging(paging), args: HttpArgs.Create(), cancellationToken: cancellationToken);
21+
=> GetAsync<AccountCollectionResult>("api/v1/banking/accounts/query", requestOptions: requestOptions.IncludeQuery(query).IncludePaging(paging), cancellationToken: cancellationToken);
2722

2823
/// <inheritdoc/>
2924
public Task<HttpResult<AccountDetail?>> GetDetailAsync(string? accountId, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
30-
=> GetAsync<AccountDetail?>("api/v1/banking/accounts/{accountId}", requestOptions: requestOptions, args: HttpArgs.Create(new HttpArg<string?>("accountId", accountId)), cancellationToken: cancellationToken);
25+
=> GetAsync<AccountDetail?>("api/v1/banking/accounts/{accountId}", requestOptions, [new HttpArg<string?>("accountId", accountId)], cancellationToken);
3126

3227
/// <inheritdoc/>
3328
public Task<HttpResult<Balance?>> GetBalanceAsync(string? accountId, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
34-
=> GetAsync<Balance?>("api/v1/banking/accounts/{accountId}/balance", requestOptions: requestOptions, args: HttpArgs.Create(new HttpArg<string?>("accountId", accountId)), cancellationToken: cancellationToken);
29+
=> GetAsync<Balance?>("api/v1/banking/accounts/{accountId}/balance", requestOptions, [new HttpArg<string?>("accountId", accountId)], cancellationToken);
3530

3631
/// <inheritdoc/>
3732
public Task<HttpResult> GetStatementAsync(string? accountId, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
38-
=> GetAsync("api/v1/banking/accounts/{accountId}/statement", requestOptions: requestOptions, args: HttpArgs.Create(new HttpArg<string?>("accountId", accountId)), cancellationToken: cancellationToken);
33+
=> GetAsync("api/v1/banking/accounts/{accountId}/statement", requestOptions, [new HttpArg<string?>("accountId", accountId)], cancellationToken);
3934
}

samples/Cdr.Banking/Cdr.Banking.Common/Agents/Generated/ReferenceDataAgent.cs

+10-15
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,34 @@ namespace Cdr.Banking.Common.Agents;
77
/// <summary>
88
/// Provides the <b>ReferenceData</b> HTTP agent.
99
/// </summary>
10-
public partial class ReferenceDataAgent : TypedHttpClientBase<ReferenceDataAgent>, IReferenceDataAgent
10+
/// <param name="client">The underlying <see cref="HttpClient"/>.</param>
11+
/// <param name="jsonSerializer">The optional <see cref="IJsonSerializer"/>.</param>
12+
/// <param name="executionContext">The optional <see cref="CoreEx.ExecutionContext"/>.</param>
13+
public partial class ReferenceDataAgent(HttpClient client, IJsonSerializer? jsonSerializer = null, CoreEx.ExecutionContext? executionContext = null) : TypedHttpClientBase<ReferenceDataAgent>(client, jsonSerializer, executionContext), IReferenceDataAgent
1114
{
12-
/// <summary>
13-
/// Initializes a new instance of the <see cref="ReferenceDataAgent"/> class.
14-
/// </summary>
15-
/// <param name="client">The underlying <see cref="HttpClient"/>.</param>
16-
/// <param name="jsonSerializer">The optional <see cref="IJsonSerializer"/>.</param>
17-
/// <param name="executionContext">The optional <see cref="CoreEx.ExecutionContext"/>.</param>
18-
public ReferenceDataAgent(HttpClient client, IJsonSerializer? jsonSerializer = null, CoreEx.ExecutionContext? executionContext = null) : base(client, jsonSerializer, executionContext) { }
19-
2015
/// <inheritdoc/>
2116
public Task<HttpResult<RefDataNamespace.OpenStatusCollection>> OpenStatusGetAllAsync(ReferenceDataFilter? args = null, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
22-
=> GetAsync<RefDataNamespace.OpenStatusCollection>("api/v1/ref/openstatuses", requestOptions: requestOptions, args: HttpArgs.Create(new HttpArg<ReferenceDataFilter>("args", args!, HttpArgType.FromUriUseProperties)), cancellationToken);
17+
=> GetAsync<RefDataNamespace.OpenStatusCollection>("api/v1/ref/openstatuses", requestOptions, [new HttpArg<ReferenceDataFilter?>("args", args, HttpArgType.FromUriUseProperties)], cancellationToken);
2318

2419
/// <inheritdoc/>
2520
public Task<HttpResult<RefDataNamespace.ProductCategoryCollection>> ProductCategoryGetAllAsync(ReferenceDataFilter? args = null, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
26-
=> GetAsync<RefDataNamespace.ProductCategoryCollection>("api/v1/ref/productcategories", requestOptions: requestOptions, args: HttpArgs.Create(new HttpArg<ReferenceDataFilter>("args", args!, HttpArgType.FromUriUseProperties)), cancellationToken);
21+
=> GetAsync<RefDataNamespace.ProductCategoryCollection>("api/v1/ref/productcategories", requestOptions, [new HttpArg<ReferenceDataFilter?>("args", args, HttpArgType.FromUriUseProperties)], cancellationToken);
2722

2823
/// <inheritdoc/>
2924
public Task<HttpResult<RefDataNamespace.AccountUTypeCollection>> AccountUTypeGetAllAsync(ReferenceDataFilter? args = null, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
30-
=> GetAsync<RefDataNamespace.AccountUTypeCollection>("api/v1/ref/accountutypes", requestOptions: requestOptions, args: HttpArgs.Create(new HttpArg<ReferenceDataFilter>("args", args!, HttpArgType.FromUriUseProperties)), cancellationToken);
25+
=> GetAsync<RefDataNamespace.AccountUTypeCollection>("api/v1/ref/accountutypes", requestOptions, [new HttpArg<ReferenceDataFilter?>("args", args, HttpArgType.FromUriUseProperties)], cancellationToken);
3126

3227
/// <inheritdoc/>
3328
public Task<HttpResult<RefDataNamespace.MaturityInstructionsCollection>> MaturityInstructionsGetAllAsync(ReferenceDataFilter? args = null, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
34-
=> GetAsync<RefDataNamespace.MaturityInstructionsCollection>("api/v1/ref/maturityinstructions", requestOptions: requestOptions, args: HttpArgs.Create(new HttpArg<ReferenceDataFilter>("args", args!, HttpArgType.FromUriUseProperties)), cancellationToken);
29+
=> GetAsync<RefDataNamespace.MaturityInstructionsCollection>("api/v1/ref/maturityinstructions", requestOptions, [new HttpArg<ReferenceDataFilter?>("args", args, HttpArgType.FromUriUseProperties)], cancellationToken);
3530

3631
/// <inheritdoc/>
3732
public Task<HttpResult<RefDataNamespace.TransactionTypeCollection>> TransactionTypeGetAllAsync(ReferenceDataFilter? args = null, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
38-
=> GetAsync<RefDataNamespace.TransactionTypeCollection>("api/v1/ref/transactiontypes", requestOptions: requestOptions, args: HttpArgs.Create(new HttpArg<ReferenceDataFilter>("args", args!, HttpArgType.FromUriUseProperties)), cancellationToken);
33+
=> GetAsync<RefDataNamespace.TransactionTypeCollection>("api/v1/ref/transactiontypes", requestOptions, [new HttpArg<ReferenceDataFilter?>("args", args, HttpArgType.FromUriUseProperties)], cancellationToken);
3934

4035
/// <inheritdoc/>
4136
public Task<HttpResult<RefDataNamespace.TransactionStatusCollection>> TransactionStatusGetAllAsync(ReferenceDataFilter? args = null, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
42-
=> GetAsync<RefDataNamespace.TransactionStatusCollection>("api/v1/ref/transactionstatuses", requestOptions: requestOptions, args: HttpArgs.Create(new HttpArg<ReferenceDataFilter>("args", args!, HttpArgType.FromUriUseProperties)), cancellationToken);
37+
=> GetAsync<RefDataNamespace.TransactionStatusCollection>("api/v1/ref/transactionstatuses", requestOptions, [new HttpArg<ReferenceDataFilter?>("args", args, HttpArgType.FromUriUseProperties)], cancellationToken);
4338

4439
/// <inheritdoc/>
4540
public Task<HttpResult> GetNamedAsync(string[] names, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)

samples/Cdr.Banking/Cdr.Banking.Common/Agents/Generated/TransactionAgent.cs

+5-10
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,12 @@ namespace Cdr.Banking.Common.Agents;
77
/// <summary>
88
/// Provides the <see cref="Transaction"/> HTTP agent.
99
/// </summary>
10-
public partial class TransactionAgent : TypedHttpClientBase<TransactionAgent>, ITransactionAgent
10+
/// <param name="client">The underlying <see cref="HttpClient"/>.</param>
11+
/// <param name="jsonSerializer">The optional <see cref="IJsonSerializer"/>.</param>
12+
/// <param name="executionContext">The optional <see cref="CoreEx.ExecutionContext"/>.</param>
13+
public partial class TransactionAgent(HttpClient client, IJsonSerializer? jsonSerializer = null, CoreEx.ExecutionContext? executionContext = null) : TypedHttpClientBase<TransactionAgent>(client, jsonSerializer, executionContext), ITransactionAgent
1114
{
12-
/// <summary>
13-
/// Initializes a new instance of the <see cref="TransactionAgent"/> class.
14-
/// </summary>
15-
/// <param name="client">The underlying <see cref="HttpClient"/>.</param>
16-
/// <param name="jsonSerializer">The optional <see cref="IJsonSerializer"/>.</param>
17-
/// <param name="executionContext">The optional <see cref="CoreEx.ExecutionContext"/>.</param>
18-
public TransactionAgent(HttpClient client, IJsonSerializer? jsonSerializer = null, CoreEx.ExecutionContext? executionContext = null) : base(client, jsonSerializer, executionContext) { }
19-
2015
/// <inheritdoc/>
2116
public Task<HttpResult<TransactionCollectionResult>> GetTransactionsAsync(string? accountId, TransactionArgs? args, PagingArgs? paging = null, HttpRequestOptions? requestOptions = null, CancellationToken cancellationToken = default)
22-
=> GetAsync<TransactionCollectionResult>("api/v1/banking/accounts/{accountId}/transactions", requestOptions: requestOptions.IncludePaging(paging), args: HttpArgs.Create(new HttpArg<string?>("accountId", accountId), new HttpArg<TransactionArgs?>("args", args, HttpArgType.FromUriUseProperties)), cancellationToken: cancellationToken);
17+
=> GetAsync<TransactionCollectionResult>("api/v1/banking/accounts/{accountId}/transactions", requestOptions.IncludePaging(paging), [new HttpArg<string?>("accountId", accountId), new HttpArg<TransactionArgs?>("args", args, HttpArgType.FromUriUseProperties)], cancellationToken);
2318
}

samples/Cdr.Banking/Cdr.Banking.Common/Cdr.Banking.Common.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010
<Folder Include="Entities\" />
1111
</ItemGroup>
1212
<ItemGroup>
13-
<PackageReference Include="CoreEx" Version="3.27.1" />
13+
<PackageReference Include="CoreEx" Version="3.27.3" />
1414
</ItemGroup>
1515
</Project>

samples/Cdr.Banking/Cdr.Banking.Test/Cdr.Banking.Test.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
4040
</PackageReference>
4141
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
42-
<PackageReference Include="CoreEx.UnitTesting.NUnit" Version="3.27.1" />
42+
<PackageReference Include="CoreEx.UnitTesting.NUnit" Version="3.27.3" />
4343
</ItemGroup>
4444

4545
<ItemGroup>

samples/Cdr.Banking/Cdr.Banking.Test/FixtureSetup.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ public void OneTimeSetUp()
2626
if (count == 0)
2727
{
2828
using var test = ApiTester.Create<Startup>();
29-
_cosmosDb = test.Services.GetRequiredService<ICosmos>();
29+
using var scope = test.Services.CreateScope();
30+
31+
_cosmosDb = scope.ServiceProvider.GetRequiredService<ICosmos>();
3032

3133
await _cosmosDb.Database.Client.CreateDatabaseIfNotExistsAsync(_cosmosDb.Database.Id, cancellationToken: ct).ConfigureAwait(false);
3234

samples/Demo/Beef.Demo.Api/Beef.Demo.Api.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
</PropertyGroup>
1313

1414
<ItemGroup>
15-
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.1" />
15+
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.3" />
1616
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.9.0" />
1717
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="6.9.0" />
1818
</ItemGroup>

samples/Demo/Beef.Demo.Business/Beef.Demo.Business.csproj

+8-8
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
</ItemGroup>
1717

1818
<ItemGroup>
19-
<PackageReference Include="CoreEx" Version="3.27.1" />
20-
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.1" />
21-
<PackageReference Include="CoreEx.Cosmos" Version="3.27.1" />
22-
<PackageReference Include="CoreEx.Database" Version="3.27.1" />
23-
<PackageReference Include="CoreEx.Database.SqlServer" Version="3.27.1" />
24-
<PackageReference Include="CoreEx.EntityFrameworkCore" Version="3.27.1" />
25-
<PackageReference Include="CoreEx.Validation" Version="3.27.1" />
26-
<PackageReference Include="CoreEx.FluentValidation" Version="3.27.1" />
19+
<PackageReference Include="CoreEx" Version="3.27.3" />
20+
<PackageReference Include="CoreEx.AspNetCore" Version="3.27.3" />
21+
<PackageReference Include="CoreEx.Cosmos" Version="3.27.3" />
22+
<PackageReference Include="CoreEx.Database" Version="3.27.3" />
23+
<PackageReference Include="CoreEx.Database.SqlServer" Version="3.27.3" />
24+
<PackageReference Include="CoreEx.EntityFrameworkCore" Version="3.27.3" />
25+
<PackageReference Include="CoreEx.Validation" Version="3.27.3" />
26+
<PackageReference Include="CoreEx.FluentValidation" Version="3.27.3" />
2727
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.20" />
2828
</ItemGroup>
2929

samples/Demo/Beef.Demo.Business/Data/PersonData.cs

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ private async Task<Person> MergeOnImplementationAsync(Guid personFromId, Guid pe
3636
private Task MarkOnImplementationAsync()
3737
{
3838
using var scope = _logger.BeginScope(new Dictionary<string, object> { { "MyKey", "MyValue" } });
39+
CoreEx.ExecutionContext.Current.Messages.Add(MessageType.Warning, "Software licence is overdue; please pay immediately or services will be halted.");
3940
_logger.LogWarning("Mark operation implementation currently does not exist.");
4041
return Task.CompletedTask;
4142
}

0 commit comments

Comments
 (0)