From cdf8fc84b9e1eb2c9de340089c988f2d37677c55 Mon Sep 17 00:00:00 2001 From: Michael Crawford Date: Fri, 17 Feb 2023 15:35:40 -0500 Subject: [PATCH] GetValidatedArgument[Async] uses context.RequestServices Using the schema to access the root service provider made it impossible to use validators with a scoped lifetime, or with scoped dependencies. By using context.RequestServices we can access the service provider that's appropriate for the current scope (Asp.Net request scope, or a child scope created for a field resolver). --- .../FluentValidationExtensions_GetArgument.cs | 4 ++-- .../FluentValidationExtensions_GetArgumentAsync.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/GraphQL.FluentValidation/FluentValidationExtensions_GetArgument.cs b/src/GraphQL.FluentValidation/FluentValidationExtensions_GetArgument.cs index f7049de3..a6552b47 100644 --- a/src/GraphQL.FluentValidation/FluentValidationExtensions_GetArgument.cs +++ b/src/GraphQL.FluentValidation/FluentValidationExtensions_GetArgument.cs @@ -22,7 +22,7 @@ public static TArgument GetValidatedArgument(this IResolveFieldContex { var argument = context.GetArgument(name, defaultValue); var validatorCache = context.GetCache(); - ArgumentValidation.Validate(validatorCache, typeof(TArgument), argument, context.UserContext, context.Schema as IServiceProvider); + ArgumentValidation.Validate(validatorCache, typeof(TArgument), argument, context.UserContext, context.RequestServices); return argument!; } @@ -43,7 +43,7 @@ public static object GetValidatedArgument(this IResolveFieldContext context, Typ { var argument = context.GetArgument(argumentType, name, defaultValue); var validatorCache = context.GetCache(); - ArgumentValidation.Validate(validatorCache, argumentType, argument, context.UserContext, context.Schema as IServiceProvider); + ArgumentValidation.Validate(validatorCache, argumentType, argument, context.UserContext, context.RequestServices); return argument!; } } \ No newline at end of file diff --git a/src/GraphQL.FluentValidation/FluentValidationExtensions_GetArgumentAsync.cs b/src/GraphQL.FluentValidation/FluentValidationExtensions_GetArgumentAsync.cs index b737d480..9c68168c 100644 --- a/src/GraphQL.FluentValidation/FluentValidationExtensions_GetArgumentAsync.cs +++ b/src/GraphQL.FluentValidation/FluentValidationExtensions_GetArgumentAsync.cs @@ -22,7 +22,7 @@ public static async Task GetValidatedArgumentAsync(this IR { var argument = context.GetArgument(name, defaultValue); var validatorCache = context.GetCache(); - await ArgumentValidation.ValidateAsync(validatorCache, typeof(TArgument), argument, context.UserContext, context.Schema as IServiceProvider); + await ArgumentValidation.ValidateAsync(validatorCache, typeof(TArgument), argument, context.UserContext, context.RequestServices); return argument!; } @@ -43,7 +43,7 @@ public static async Task GetValidatedArgumentAsync(this IResolveFieldCon { var argument = context.GetArgument(argumentType, name, defaultValue); var validatorCache = context.GetCache(); - await ArgumentValidation.ValidateAsync(validatorCache, argumentType, argument, context.UserContext, context.Schema as IServiceProvider); + await ArgumentValidation.ValidateAsync(validatorCache, argumentType, argument, context.UserContext, context.RequestServices); return argument!; } } \ No newline at end of file