我在几个项目中定义了几个GraphQL ObjectGraphType和查询。所有这些项目都依赖于asp.net样板GraphQL项目。当我尝试调用任何graphQL查询时,它返回错误“ Castle.MicroKernel.ComponentNotFoundException:”未找到支持该服务的组件“。
Exception Stacktrace
Sample.Types.ProductPagedResultGraphType was found ---> Castle.MicroKernel.ComponentNotFoundException: No component for supporting the service Sample.Types.ProductPagedResultGraphType was found at Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve(Type service, Arguments arguments, IReleasePolicy policy, Boolean ignoreParentContext) at Castle.Windsor.MsDependencyInjection.ScopedWindsorServiceProvider.GetServiceInternal(Type serviceType, Boolean isOptional) in D:\Github\castle-windsor-ms-adapter\src\Castle.Windsor.MsDependencyInjection\ScopedWindsorServiceProvider.cs:line 55 at GraphQL.Types.Schema.<CreateTypesLookup>b__56_2(Type type) at GraphQL.Types.GraphTypesLookup.AddTypeIfNotRegistered(Type type, TypeCollectionContext context) at GraphQL.Types.GraphTypesLookup.HandleField(Type parentType, FieldType field, TypeCollectionContext context) at GraphQL.Types.GraphTypesLookup.AddType(IGraphType type, TypeCollectionContext context) at GraphQL.Types.GraphTypesLookup.Create(IEnumerable`1 types, IEnumerable`1 directives, Func`2 resolveType, IFieldNameConverter fieldNameConverter) at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor) at System.Lazy`1.CreateValue() at GraphQL.Types.Schema.get_AllTypes() at GraphQL.Instrumentation.FieldMiddlewareBuilder.ApplyTo(ISchema schema) at GraphQL.DocumentExecuter.ExecuteAsync(ExecutionOptions options) --- End of inner exception stack trace ---
[当所有这些查询和ObjectGraphType都在1个项目中时有效,该项目是asp.net样板GraphQL项目。
为了允许在多个项目中使用GraphQL ObjectGraphType和查询,而不是将所有内容都放入asp.net样板GraphQL项目中,我进行了以下更改:
ServiceCollectionExtensions.cs(在asp.net样板GraphQL项目中)
public static class ServiceCollectionExtensions { public static void AddAndConfigureGraphQL(this IServiceCollection services) { services.AddScoped<IDependencyResolver>( x => new FuncDependencyResolver(x.GetRequiredService) ); services .AddGraphQL(x => { x.ExposeExceptions = DebugHelper.IsDebug; }) .AddGraphTypes(ServiceLifetime.Scoped) .AddUserContextBuilder(httpContext => httpContext.User) .AddDataLoader(); } }
ExtQueryContainer.cs
public sealed class ExtQueryContainer : QueryContainer { public QueryContainer(RoleQuery roleQuery, UserQuery userQuery, OrganizationUnitQuery organizationUnitQuery, ProductQuery productQuery) : base(roleQuery, userQuery, organizationUnitQuery) { AddField(productQuery.GetFieldType()); } }
GraphQLSchema.cs
public class GraphQLSchema : Schema, ITransientDependency
{
public GraphQLSchema(IDependencyResolver resolver) : base(resolver)
{
Query = resolver.Resolve<ExtQueryContainer>();
}
}
我在几个项目中定义了几个GraphQL ObjectGraphType和查询。所有这些项目都依赖于asp.net样板GraphQL项目。它返回错误“ Castle.MicroKernel ....
您需要为每个程序集调用AddGraphTypes
: