簡體   English   中英

沒有注冊類型'ProjectModels.Graphs.ProjectGraph'的服務

[英]No service for type 'ProjectModels.Graphs.ProjectGraph' has been registered

我正在嘗試使用GraphQL.EntityFramework和EntityFramework來實現GraphQl,但出現錯誤。

GraphQL.ExecutionError: No service for type 'ProjectModels.Graphs.ProjectGraph' has been registered. ---> System.InvalidOperationException: No service for type 'ProjectModels.Graphs.ProjectGraph' has been registered.
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   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)
--- End of stack trace from previous location where exception was thrown ---
   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 ---

我的ProjectGraph如下所示。

using GraphQL.EntityFramework;
using ProjectModels.Master;
using ProjectModels;

namespace ProjectModels.Graphs
{
public class ProjectGraph : EfObjectGraphType<Project>
    {
        public ProjectGraph(IEfGraphQLService graphQlService) :
        base(graphQlService)
        {
            Field(x => x.Id);
            Field(x => x.Name);
            Field(x => x.ProjectGroup, type: typeof(ProjectGroupGraph));
            Field(x => x.ProjectUser, type: typeof(ProjectUserGraph));
            AddNavigationListField(
            name: "datasource",
            resolve: context =>
            {
                return (context.UserContext as DataContextList).projectDbContext.Datasource;
            });
        }
    }
}

我的查詢類如下所示:

public class Query :
    QueryGraphType
{
    public Query(IEfGraphQLService graphQlService) :
        base(graphQlService)
    {
        AddQueryField(
            name: "Project",
            resolve: context =>
            {
                var dataContext = (context.UserContext as DataContextList).masterDbContext;
                return dataContext.Project;
            });
    }
}

在startup.cs-> ConfigureServices中遵循以下內容

GraphTypeTypeRegistry.Register<Project, ProjectGraph>();

我正在查詢如下

{
                      project {
                        name,
                        {
                            datasource {
                            name
                            }
                        }
                      }
                  }

我在這里想念什么?

請在Startup.cs的ConfigureServices方法中嘗試此操作:

services.AddSingleton<IDependencyResolver>(s => new FuncDependencyResolver(s.GetRequiredService));
services.AddSingleton<ProjectGraph>();

您需要在dotnet核心IOC容器中注冊一個依賴關系解析器和您的類

請參閱: https : //graphql-dotnet.github.io/docs/getting-started/dependency-injection

如果您遵循他們的startup.cs文件,並且編碼如下。

foreach (var type in GetGraphQlTypes())
{
    services.AddSingleton(type);
}


static IEnumerable<Type> GetGraphQlTypes()
{
    return typeof(Startup).Assembly
        .GetTypes()
        .Where(x => !x.IsAbstract &&
                    (typeof(IObjectGraphType).IsAssignableFrom(x) ||
                     typeof(IInputObjectGraphType).IsAssignableFrom(x)));
}

然后,請確保類在同一項目中,否則它將無法正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM