La mise en œuvre de GraphQL (GraphQL pour .Net) en ASP.NET de Base, pourquoi ma Requête:ObjectGraphType classe non enregistrée par l'injection de dépendance?

J'ai la configuration de base de l'Api Web de démontrer l'utilisation de GraphQL à l'aide de ASP.Net de Base. J'ai Suivi un tutoriel, ce qui se sent comme exactement, mais je reçois une erreur que je ne comprends pas.

Je suis en utilisant GraphQL pour .NET v2.4.0

C'est le message d'erreur:

System.InvalidOperationException: No service for type 'Land.GraphQL.Queries.LandQuery' has been registered.
  at at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
  at at GraphQL.FuncDependencyResolver.Resolve(Type type)
  at at GraphQL.FuncDependencyResolver.Resolve[T]()
  at Land.GraphQL.LandSchema..ctor(IDependencyResolver resolver) in .../LandSchema.cs:11

Je serais reconnaissant pour toute lumière :)

Voici le code:

J'ai créé un LandType:ObjectGraphType de définir le Type:

    public class LandType : ObjectGraphType<Entities.Land>
    {
        public LandType(ILandDataAccess landDataAccess)
        {
            Name = "Land";

            Field(land => land.Id, type: typeof(IdGraphType)).Description("Land Id in LandApi context");
            Field(land => land.Apn)
                .Description(
                    "Assessor's Parcel Number (APN) is a unique number that is assigned to each tract of land in a county by the Tax Assessor.");
            Field(land => land.Address).Description("");
            Field(land => land.ZipCode).Description("");
            Field(land => land.City).Description("");
            Field(land => land.County).Description("");
            Field(land => land.State).Description("");
            Field(land => land.Country).Description("");
            Field(land => land.GisNumber).Description("");
            Field(land => land.AssessedValue).Description("");
            Field(land => land.LegalDescription).Description("");
            Field(land => land.Acreage, type: typeof(FloatGraphType)).Description("Acreage of Land");

        }
    }

J'ai créé un LandQuery:ObjectGraphType pour définir la Requête:

public class LandQuery : ObjectGraphType
    {
        public LandQuery(ILandDataAccess dataAccess)
        {
            Field<ListGraphType<LandType>>(
                "Land", 
                resolve: context => dataAccess.GetLandsAsync());
        }
    }

J'ai créé un LandSchema:Schéma pour définir le Schéma:

public class LandSchema : Schema
    {
        public LandSchema(IDependencyResolver resolver) : base(resolver)
        {
            Query = resolver.Resolve<LandQuery>();
        }
    }

J'ai ajouté le service et middleware pour le fichier de Démarrage:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddScoped<IDependencyResolver>(s => new FuncDependencyResolver(
                s.GetRequiredService));

            services.AddScoped<LandSchema>();

            services.AddGraphQL(o => { o.ExposeExceptions = true; })
                .AddGraphTypes(ServiceLifetime.Scoped);
        }

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
                app.UseGraphQL<LandSchema>();
        }
+3
2019-09-18 05:25:48
source
1 réponses

Produit::find($id), l'Id passé probablement n'existe pas dans votre tableau. Assurez-vous de passer d'un enregistrement.

+0
2019-09-18 07:05:08

Voir d'autres questions sur les étiquettes