Skip to content

Commit d56978c

Browse files
authored
feat: add PatternKit hosting extensions (#392)
* feat: add PatternKit hosting extensions * chore: rerun pr validation * ci: stabilize solution test coverage runs
1 parent a51749d commit d56978c

26 files changed

Lines changed: 7294 additions & 6075 deletions

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ jobs:
5454
run: |
5555
dotnet test PatternKit.slnx \
5656
--configuration Release \
57+
-p:TestTfmsInParallel=false \
5758
--collect:"XPlat Code Coverage" \
5859
-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura \
5960
-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Include="[PatternKit*]*" \
@@ -167,6 +168,7 @@ jobs:
167168
run: |
168169
dotnet test PatternKit.slnx \
169170
--configuration Release \
171+
-p:TestTfmsInParallel=false \
170172
--collect:"XPlat Code Coverage" \
171173
-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura \
172174
-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Include="[PatternKit*]*" \

.github/workflows/pr-validation.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,9 @@ jobs:
7777
dotnet test PatternKit.slnx \
7878
--configuration Release \
7979
--no-build \
80+
-p:TestTfmsInParallel=false \
8081
--verbosity normal \
81-
--logger "trx;LogFileName=test-results.trx" \
82+
--logger "trx" \
8283
--collect:"XPlat Code Coverage" \
8384
--results-directory ./TestResults \
8485
-- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
@@ -117,7 +118,8 @@ jobs:
117118
# Package all library projects
118119
for project in src/PatternKit.Core \
119120
src/PatternKit.Generators \
120-
src/PatternKit.Generators.Abstractions; do
121+
src/PatternKit.Generators.Abstractions \
122+
src/PatternKit.Hosting.Extensions; do
121123
if [ -d "$project" ]; then
122124
echo " Packing $project..."
123125
dotnet pack "$project" \

Directory.Packages.props

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77
<PackageVersion Include="coverlet.collector" Version="10.0.1" />
88
<PackageVersion Include="JetBrains.Annotations" Version="2025.2.4" />
99
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="5.3.0" />
10-
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="5.0.0" />
10+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="5.3.0" />
1111
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.8" />
1212
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.8" />
1313
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.8" />
1414
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.8" />
15+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.8" />
1516
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.8" />
1617
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.8" />
1718
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.8" />
@@ -23,8 +24,8 @@
2324
<PackageVersion Include="System.Collections.Immutable" Version="10.0.8" />
2425
<PackageVersion Include="System.Linq.Async" Version="7.0.1" />
2526
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="4.6.3" />
26-
<PackageVersion Include="TinyBDD" Version="0.19.14" />
27-
<PackageVersion Include="TinyBDD.Xunit" Version="0.19.14" />
27+
<PackageVersion Include="TinyBDD" Version="0.19.21" />
28+
<PackageVersion Include="TinyBDD.Xunit" Version="0.19.21" />
2829
<PackageVersion Include="Testcontainers" Version="4.12.0" />
2930
<PackageVersion Include="Testcontainers.RabbitMq" Version="4.12.0" />
3031
<PackageVersion Include="xunit" Version="2.9.3" />

PatternKit.slnx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<Project Path="src/PatternKit.Examples/PatternKit.Examples.csproj" />
1111
<Project Path="src/PatternKit.Generators/PatternKit.Generators.csproj" />
1212
<Project Path="src/PatternKit.Generators.Abstractions/PatternKit.Generators.Abstractions.csproj" />
13+
<Project Path="src/PatternKit.Hosting.Extensions/PatternKit.Hosting.Extensions.csproj" />
1314
</Folder>
1415
<Folder Name="/benchmarks/">
1516
<Project Path="benchmarks\PatternKit.Benchmarks\PatternKit.Benchmarks.csproj" Type="Classic C#" />
@@ -18,5 +19,6 @@
1819
<Project Path="test/PatternKit.Tests/PatternKit.Tests.csproj" />
1920
<Project Path="test\PatternKit.Examples.Tests\PatternKit.Examples.Tests.csproj" Type="Classic C#" />
2021
<Project Path="test\PatternKit.Generators.Tests\PatternKit.Generators.Tests.csproj" Type="Classic C#" />
22+
<Project Path="test\PatternKit.Hosting.Extensions.Tests\PatternKit.Hosting.Extensions.Tests.csproj" Type="Classic C#" />
2123
</Folder>
2224
</Solution>

README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,33 @@ Install via NuGet:
3434
dotnet add package PatternKit --version <latest>
3535
```
3636

37+
For first-party `IServiceCollection` integration in ASP.NET Core, worker services, or generic host apps:
38+
39+
```bash
40+
dotnet add package PatternKit.Hosting.Extensions --version <latest>
41+
```
42+
43+
```csharp
44+
using Microsoft.Extensions.DependencyInjection;
45+
using PatternKit.Hosting.DependencyInjection;
46+
using PatternKit.Messaging.Channels;
47+
48+
var services = new ServiceCollection();
49+
50+
services
51+
.AddPatternKitMessageChannel<OrderCommand>(
52+
"orders",
53+
channel => channel.WithCapacity(100, MessageChannelBackpressurePolicy.Reject))
54+
.AddPatternKitRetryPolicy<ServiceReply>(
55+
"inventory-retry",
56+
retry => retry.WithMaxAttempts(3).HandleResult(static reply => !reply.Available));
57+
58+
public sealed record OrderCommand(string OrderId, decimal Total);
59+
public sealed record ServiceReply(bool Available);
60+
```
61+
62+
See [Hosting Extensions](docs/guides/hosting-extensions.md) for reusable DI registrations that do not depend on the examples assembly.
63+
3764
Use a pattern immediately—here’s a simple **Strategy**:
3865

3966
```csharp

0 commit comments

Comments
 (0)