Skip to content

Commit f7815e1

Browse files
authored
Merge pull request #2162 from Cratis:fix/rules-validators
Fix/rules-validators
2 parents 9e61ae9 + e8d7e6d commit f7815e1

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

Source/Clients/AspNetCore.Specs/Rules/for_RulesModelValidatorProvider/given/one_rule_for_type.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
33

44
using Cratis.Chronicle.Rules;
5+
using Microsoft.AspNetCore.Http;
56

67
namespace Cratis.Chronicle.AspNetCore.Rules.for_RulesModelValidatorProvider.given;
78

@@ -10,12 +11,20 @@ public class one_rule_for_type : Specification
1011
protected RulesModelValidatorProvider _provider;
1112
protected IRules _rules;
1213
protected IServiceProvider _serviceProvider;
14+
protected IServiceProvider _scopedServiceProvider;
15+
protected IHttpContextAccessor _httpContextAccessor;
1316

1417
void Establish()
1518
{
1619
_rules = Substitute.For<IRules>();
1720
_serviceProvider = Substitute.For<IServiceProvider>();
18-
_serviceProvider.GetService(typeof(IRules)).Returns(_rules);
21+
_httpContextAccessor = Substitute.For<IHttpContextAccessor>();
22+
_serviceProvider.GetService(typeof(IHttpContextAccessor)).Returns(_httpContextAccessor);
23+
var httpContext = Substitute.For<HttpContext>();
24+
_httpContextAccessor.HttpContext.Returns(httpContext);
25+
_scopedServiceProvider = Substitute.For<IServiceProvider>();
26+
httpContext.RequestServices.Returns(_scopedServiceProvider);
27+
_scopedServiceProvider.GetService(typeof(IRules)).Returns(_rules);
1928
_provider = new(_serviceProvider);
2029
}
2130
}

Source/Clients/AspNetCore/ChronicleClientServiceCollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public static IServiceCollection AddCratisChronicleClient(this IServiceCollectio
7979
services.AddScoped(sp => sp.GetRequiredService<IEventStore>().Reactors);
8080
services.AddScoped(sp => sp.GetRequiredService<IEventStore>().Reducers);
8181
services.AddScoped(sp => sp.GetRequiredService<IEventStore>().Projections);
82-
services.AddSingleton<IRules, Rules>();
82+
services.AddScoped<IRules, Rules>();
8383
services.AddSingleton(sp => sp.GetRequiredService<IChronicleClient>().Options.ArtifactsProvider);
8484
services.AddSingleton(sp => sp.GetRequiredService<IChronicleClient>().Options.NamingPolicy);
8585

Source/Clients/AspNetCore/Rules/RulesModelValidatorProvider.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
33

44
using Cratis.Chronicle.Rules;
5+
using Microsoft.AspNetCore.Http;
56
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
67
using Microsoft.Extensions.DependencyInjection;
78

@@ -35,7 +36,8 @@ public RulesModelValidatorProvider(IServiceProvider serviceProvider)
3536
/// <inheritdoc/>
3637
public void CreateValidators(ModelValidatorProviderContext context)
3738
{
38-
var rulesSystem = ServiceProvider.GetRequiredService<IRules>();
39+
var httpContextAccessor = ServiceProvider.GetRequiredService<IHttpContextAccessor>();
40+
var rulesSystem = httpContextAccessor.HttpContext!.RequestServices.GetRequiredService<IRules>();
3941
if (rulesSystem.HasFor(context.ModelMetadata.ModelType))
4042
{
4143
var ruleTypes = rulesSystem.GetFor(context.ModelMetadata.ModelType);

0 commit comments

Comments
 (0)