Skip to content

Commit 5e13e59

Browse files
Revert to using features as the building block for custom check implementations (#111)
* Provide access to settings * Approve api * Go back to features * Use feature deps * Make ctor internal
1 parent 6d75241 commit 5e13e59

9 files changed

Lines changed: 60 additions & 41 deletions

File tree

src/NServiceBus.ClaimCheck.Tests/APIApprovals.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class APIApprovals
1010
[Test]
1111
public void ApproveClaimCheck()
1212
{
13-
var publicApi = typeof(ClaimCheckFeature).Assembly.GeneratePublicApi(new ApiGeneratorOptions
13+
var publicApi = typeof(IClaimCheck).Assembly.GeneratePublicApi(new ApiGeneratorOptions
1414
{
1515
ExcludeAttributes = ["System.Runtime.Versioning.TargetFrameworkAttribute", "System.Reflection.AssemblyMetadataAttribute"]
1616
});

src/NServiceBus.ClaimCheck.Tests/ApprovalFiles/APIApprovals.ApproveClaimCheck.approved.txt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace NServiceBus.ClaimCheck
99
public abstract class ClaimCheckDefinition
1010
{
1111
protected ClaimCheckDefinition() { }
12-
protected abstract void ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection services);
12+
protected abstract void EnableFeature(NServiceBus.Settings.SettingsHolder settings);
1313
}
1414
public class ClaimCheckExtensions : NServiceBus.Configuration.AdvancedExtensibility.ExposeSettings
1515
{
@@ -69,7 +69,7 @@ namespace NServiceBus
6969
public class FileShareClaimCheck : NServiceBus.ClaimCheck.ClaimCheckDefinition
7070
{
7171
public FileShareClaimCheck() { }
72-
protected override void ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection services) { }
72+
protected override void EnableFeature(NServiceBus.Settings.SettingsHolder settings) { }
7373
}
7474
public interface IClaimCheckProperty
7575
{
@@ -98,11 +98,8 @@ namespace NServiceBus
9898
}
9999
namespace NServiceBus.Features
100100
{
101-
[System.Obsolete("The ClaimCheck feature should not be referenced explicitly. Will be removed in ve" +
102-
"rsion 3.0.0.", true)]
103101
public sealed class ClaimCheck : NServiceBus.Features.Feature
104102
{
105-
public ClaimCheck() { }
106103
protected override void Setup(NServiceBus.Features.FeatureConfigurationContext context) { }
107104
}
108105
}

src/NServiceBus.ClaimCheck/ClaimCheck.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
1-
namespace NServiceBus;
1+
namespace NServiceBus.Features;
22

33
using System;
44
using System.Collections.Generic;
55
using System.Linq;
66
using System.Threading;
77
using System.Threading.Tasks;
8-
using Features;
98
using Microsoft.Extensions.DependencyInjection;
10-
using ClaimCheck;
9+
using NServiceBus.ClaimCheck;
1110

12-
sealed class ClaimCheckFeature : Feature
11+
/// <summary>
12+
/// Used to configure the claim check implementation.
13+
/// </summary>
14+
public sealed class ClaimCheck : Feature
1315
{
16+
internal ClaimCheck() { }
17+
18+
/// <inheritdoc />
1419
protected override void Setup(FeatureConfigurationContext context)
1520
{
1621
if (context.Services.Any(sd => sd.ServiceType == typeof(IClaimCheckSerializer)))
@@ -21,9 +26,6 @@ protected override void Setup(FeatureConfigurationContext context)
2126
var serializer = context.Settings.Get<IClaimCheckSerializer>();
2227
var additionalDeserializers = context.Settings.Get<List<IClaimCheckSerializer>>();
2328
var conventions = context.Settings.Get<ClaimCheckConventions>();
24-
var definition = context.Settings.Get<ClaimCheckDefinition>();
25-
26-
definition.ConfigureServices(context.Services);
2729

2830
context.RegisterStartupTask(b => new ClaimCheckInitializer(b.GetRequiredService<IClaimCheck>()));
2931
context.Pipeline.Register(new ClaimCheckSendBehavior.Registration(conventions, serializer));
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
namespace NServiceBus.ClaimCheck;
22

3-
using Microsoft.Extensions.DependencyInjection;
3+
using Settings;
44

55
/// <summary>
66
/// Defines an implementation of the claim check pattern that can be used by NServiceBus.
77
/// </summary>
88
public abstract class ClaimCheckDefinition
99
{
1010
/// <summary>
11-
/// Called when the claim check implementation should register itself in the container.
11+
/// Called when the claim check implementation should enable its feature.
1212
/// </summary>
13-
/// <param name="services">The service collection to register in.</param>
14-
protected internal abstract void ConfigureServices(IServiceCollection services);
13+
protected internal abstract void EnableFeature(SettingsHolder settings);
1514
}

src/NServiceBus.ClaimCheck/CustomClaimCheck.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,27 @@
22

33
using System;
44
using ClaimCheck;
5+
using Features;
56
using Microsoft.Extensions.DependencyInjection;
7+
using Settings;
68

79
class CustomClaimCheck(Func<IServiceProvider, IClaimCheck> claimCheckFactory) : ClaimCheckDefinition
810
{
9-
protected internal override void ConfigureServices(IServiceCollection services) => services.AddSingleton(claimCheckFactory);
11+
protected internal override void EnableFeature(SettingsHolder settings)
12+
{
13+
settings.Set(claimCheckFactory);
14+
settings.EnableFeature<CustomClaimCheckFeature>();
15+
}
16+
17+
class CustomClaimCheckFeature : Feature
18+
{
19+
public CustomClaimCheckFeature()
20+
{
21+
EnableByDefault<Features.ClaimCheck>();
22+
23+
DependsOn<Features.ClaimCheck>();
24+
}
25+
26+
protected override void Setup(FeatureConfigurationContext context) => context.Services.AddSingleton(context.Settings.Get<Func<IServiceProvider, IClaimCheck>>());
27+
}
1028
}
Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,43 @@
11
namespace NServiceBus;
22

33
using ClaimCheck;
4+
using Features;
45
using Microsoft.Extensions.DependencyInjection;
6+
using Settings;
57

68
/// <summary>
79
/// Base class for implementations of the claim check pattern definitions.
810
/// </summary>
911
public class FileShareClaimCheck : ClaimCheckDefinition
1012
{
11-
internal string BasePath { get; set; }
13+
internal string BasePath;
1214

1315
/// <inheritdoc />
14-
protected internal override void ConfigureServices(IServiceCollection services)
16+
protected internal override void EnableFeature(SettingsHolder settings) => settings.EnableFeature<FileShareClaimCheckFeature>();
17+
18+
class FileShareClaimCheckFeature : Feature
1519
{
16-
if (string.IsNullOrEmpty(BasePath))
20+
public FileShareClaimCheckFeature()
1721
{
18-
throw new InvalidOperationException("Specify the basepath for FileShareClaimCheck, eg endpointConfiguration.UseClaimCheck<FileShareClaimCheck>().BasePath(\"c:\\claimcheck\")");
22+
EnableByDefault<Features.ClaimCheck>();
23+
24+
DependsOn<Features.ClaimCheck>();
1925
}
2026

21-
services.AddSingleton<IClaimCheck>(new FileShareClaimCheckImplementation(BasePath));
27+
protected override void Setup(FeatureConfigurationContext context)
28+
{
29+
var basePath = context.Settings.Get<FileShareClaimCheck>().BasePath;
30+
if (string.IsNullOrWhiteSpace(basePath))
31+
{
32+
throw new InvalidOperationException("Specify the basepath for FileShareClaimCheck, eg endpointConfiguration.UseClaimCheck<FileShareClaimCheck>().BasePath(\"c:\\claimcheck\")");
33+
}
34+
35+
context.Services.AddSingleton<IClaimCheck>(new FileShareClaimCheckImplementation(basePath));
36+
37+
context.Settings.AddStartupDiagnosticsSection("FileShareClaimCheck", new
38+
{
39+
basePath
40+
});
41+
}
2242
}
2343
}

src/NServiceBus.ClaimCheck/NServiceBus.ClaimCheck.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
<ItemGroup>
1111
<PackageReference Include="NServiceBus" Version="10.0.0-alpha.10" />
1212
<PackageReference Include="Particular.Packaging" Version="4.5.0" PrivateAssets="All" />
13-
<PackageReference Include="Particular.Obsoletes" Version="1.0.0" PrivateAssets="All" ExcludeAssets="runtime" />
1413

1514
</ItemGroup>
1615

src/NServiceBus.ClaimCheck/UseClaimCheckExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,6 @@ static void EnableClaimCheck<TDefinition>(EndpointConfiguration config, TDefinit
6767
_ = settings.GetOrCreate<List<IClaimCheckSerializer>>();
6868
_ = settings.GetOrCreate<ClaimCheckConventions>();
6969

70-
config.EnableFeature<ClaimCheckFeature>();
70+
selectedClaimCheck.EnableFeature(settings);
7171
}
7272
}

src/NServiceBus.ClaimCheck/obsoletes-v2.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)