【发布时间】:2021-03-31 19:56:48
【问题描述】:
更新:之前的 null 错误是因为创建了一个没有参数的 Query 类的空构造函数。现在我删除了那个空的构造函数,但是得到一个新的错误:System.MissingMethodException: No parameterless constructor defined for type 'App.Controllers.Graphs.Query'
如何将服务注入 GraphQL Query 类? (架构优先方法)
在我的 dotnet core 3.1 项目中,我安装了:GraphQL.Server.Transports.AspNetCore3.5.0-alpha0046
这是我的根图:
public class RootGraph : Schema
{
public RootGraph(IServiceProvider provider) : base(provider)
{
var schema = For(@"
type Player {
_id: ID!
dbname: String!
isPremium: Boolean!
games: [String]!
}
input PlayerView {
dbname: String!
isPremium: Boolean!
}
type Query {
player(dbname: String!): Player
}
", _ =>
{
_.Types.Include<Query>();
});
Console.WriteLine(provider); // <-- provider is not null here, everything is good
Query = schema.Query;
}
}
然后我像这样创建我的查询类:
public class Query
{
private readonly ServiceProvider serviceProvider;
private readonly IPlayerService playerService;
public Query( IServiceProvider serviceProvider )
{
this.serviceProvider = serviceProvider as ServiceProvider;
this.playerService = serviceProvider.GetService<IPlayerService>();
}
[GraphQLMetadata("player")]
public async Task<Player> GetPlayer(string dbname)
{
Console.WriteLine(serviceProvider);
Player player = await playerService.Get(dbname);
return player;
}
}
但它不起作用。无法创建 Query 类,因为我在这里遇到异常:
System.MissingMethodException: No parameterless constructor defined for type 'App.Controllers.Graphs.Query'.\r\n
at System.RuntimeType.CreateInstanceDefaultCtorSlow(Boolean publicOnly, Boolean wrapExceptions, Boolean fillCache)\r\n
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, Boolean wrapExceptions)\r\n
at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions)\r\n
at System.Activator.CreateInstance(Type type)\r\n
at GraphQL.DefaultServiceProvider.GetService(Type serviceType)\r\n
我的Startup.cs的一部分:
public void ConfigureServices(IServiceCollection services){
...
// add services
services.AddSingleton<IPlayerService, PlayerService>();
// add GraphQL
services.AddSingleton<RootGraph>();
services.AddSingleton<Query>();
}
有人知道如何为 Query 类提供服务吗?
【问题讨论】:
标签: c# dependency-injection graphql