-
Notifications
You must be signed in to change notification settings - Fork 188
Expand file tree
/
Copy pathQueries.cs
More file actions
83 lines (67 loc) · 2.49 KB
/
Copy pathQueries.cs
File metadata and controls
83 lines (67 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using Example.Repositories;
using GraphQL.Types;
using Microsoft.Extensions.DependencyInjection;
namespace Example.GraphQL;
public interface IQueryFieldsProvider
{
void AddQueryFields(ObjectGraphType objectGraph);
}
public interface IDogQuery : IQueryFieldsProvider { }
public interface ICatQuery : IQueryFieldsProvider { }
public class DogQuery : IDogQuery
{
private readonly IServiceProvider _serviceProvider;
public DogQuery(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public void AddQueryFields(ObjectGraphType objectGraph)
{
objectGraph.Field<StringGraphType>("say", resolve: context => "woof woof woof");
objectGraph.Field<NonNullGraphType<ListGraphType<NonNullGraphType<DogType>>>>("dogBreeds", resolve: context =>
{
using var scope = _serviceProvider.CreateScope();
var dogRepository = scope.ServiceProvider.GetRequiredService<DogRepository>();
var dogs = dogRepository.GetDogs();
return dogs;
});
}
}
public class DogImageDetailsQuery : IDogQuery
{
private readonly IServiceProvider _serviceProvider;
public DogImageDetailsQuery(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public void AddQueryFields(ObjectGraphType objectGraph)
{
objectGraph.FieldAsync<NonNullGraphType<ImageDetailsType>>("dogImageDetails", resolve: async context =>
{
using var scope = _serviceProvider.CreateScope();
var imageDetailsRepository = scope.ServiceProvider.GetRequiredService<DogImageDetailsRepository>();
var imageDetails = await imageDetailsRepository.GetDogImageDetailsAsync();
return imageDetails;
});
}
}
public class CatQuery : ICatQuery
{
private readonly IServiceProvider _serviceProvider;
public CatQuery(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public void AddQueryFields(ObjectGraphType objectGraph)
{
objectGraph.Field<StringGraphType>("say", resolve: context => "meow meow meow");
objectGraph.Field<NonNullGraphType<ListGraphType<NonNullGraphType<CatType>>>>("catBreeds", resolve: context =>
{
using var scope = _serviceProvider.CreateScope();
var catRepository = scope.ServiceProvider.GetRequiredService<CatRepository>();
var cats = catRepository.GetCats();
return cats;
});
}
}