diff --git a/src/ValidationMiddleware.cs b/src/ValidationMiddleware.cs index dcf402d..52f422f 100644 --- a/src/ValidationMiddleware.cs +++ b/src/ValidationMiddleware.cs @@ -29,7 +29,7 @@ public async Task InvokeAsync(IMiddlewareContext context) value is Validate validate) { var input = context.ArgumentValue(argument.Name); - var validationContext = new ValidationContext(input); + var validationContext = new ValidationContext(input, context.Services, null); validate(input, validationContext, errors); if (errors.Any()) diff --git a/test/ValidationTests.cs b/test/ValidationTests.cs index a7c9275..6b8ec01 100644 --- a/test/ValidationTests.cs +++ b/test/ValidationTests.cs @@ -15,6 +15,7 @@ public async Task Ensure_Validation_Works_On_Arguments() { var result = await new ServiceCollection() + .AddScoped(_ => new Service()) .AddGraphQL() .AddQueryType() .AddArgumentValidator() @@ -28,6 +29,7 @@ public async Task Ensure_Validation_Works_On_Arguments_ValidEmail() { var result = await new ServiceCollection() + .AddScoped(_ => new Service()) .AddGraphQL() .AddQueryType() .AddArgumentValidator() @@ -41,6 +43,7 @@ public async Task Ensure_Validation_Works_On_InputObjects() { var result = await new ServiceCollection() + .AddScoped(_ => new Service()) .AddGraphQL() .AddQueryType() .AddArgumentValidator() @@ -54,6 +57,7 @@ public async Task Ensure_Validation_Works_On_InputObjects_ValidEmail() { var result = await new ServiceCollection() + .AddScoped(_ => new Service()) .AddGraphQL() .AddQueryType() .AddArgumentValidator() @@ -65,7 +69,7 @@ public async Task Ensure_Validation_Works_On_InputObjects_ValidEmail() public class Query { - public string ArgIsEmail([EmailAddress] string email) => email; + public string ArgIsEmail([EmailAddress][ResolveService] string email) => email; public string ArgIsInput(MyInput input) => input.Email; } @@ -74,6 +78,21 @@ public class Query public class MyInput { [EmailAddress] + [ResolveService] public string Email { get; set; } } + + public class Service + { + public bool CouldBeResolved => true; + } + + public class ResolveServiceAttribute : ValidationAttribute + { + protected override ValidationResult IsValid(object value, ValidationContext validationContext) + { + var service = (Service)validationContext.GetService(typeof(Service)); + return service is { CouldBeResolved: true } ? ValidationResult.Success : new ValidationResult("error"); + } + } }