Здесь нужна помощь, пожалуйста ...
Я смотрю на пример " graphql-dotnet / server ", где открытые объекты содержат только простые свойства.Но что, если мне нужно разрешить свойство и получить данные из репозитория, как я могу получить класс репозитория в классе Type?
Пример: в примере есть ChatQuery, отображающий «сообщения».
public ChatQuery(IChat chat)
{
Field<ListGraphType<MessageType>>("messages", resolve: context => chat.AllMessages.Take(100));
}
Экземпляр " chat " является здесь хранилищем и передает данные (сообщения) через chat.AllMessages.
Предположим, что сообщение имеет список читателей.,Затем мне нужно разрешить этот список из хранилища.Это делается в другом примере " graphql-dotnet / examples ", где " StarWars / Types / StarWarsCharacter.cs " имеет список друзей, а " StarWars /Types / HumanType"имеет репозиторий (StarWarsData), вставленный в конструктор, и его можно использовать в методе разрешения для" друзей ":
public class HumanType : ObjectGraphType<Human>
{
public HumanType(StarWarsData data)
{
Name = "Human";
Field(h => h.Id).Description("The id of the human.");
Field(h => h.Name, nullable: true).Description("The name of the human.");
Field<ListGraphType<CharacterInterface>>(
"friends",
resolve: context => data.GetFriends(context.Source)
);
Field<ListGraphType<EpisodeEnum>>("appearsIn", "Which movie they appear in.");
Field(h => h.HomePlanet, nullable: true).Description("The home planet of the human.");
Interface<CharacterInterface>();
}
}
НО, делая то же самое в примере с сервером, выигранномне работает.
public class MessageType : ObjectGraphType<Message>
{
public MessageType(IChat chat)
{
Field(o => o.Content);
Field(o => o.SentAt);
Field(o => o.From, false, typeof(MessageFromType)).Resolve(ResolveFrom);
Field<ListGraphType<Viewer>>(
"viewers",
resolve: context => chat.GetViewers(context.Source)
);
}
private MessageFrom ResolveFrom(ResolveFieldContext<Message> context)
{
var message = context.Source;
return message.From;
}
}
Когда я добавляю репозиторий чата в конструктор в MessageType, он не работает.
Я, очевидно, что-то здесь упускаю;почему Dependency Injection не внедряет экземпляр чата в класс MessageType в проекте "graphql-dotnet / server"?Но это работает в проекте "graphql-dotnet / examples".
Best, Magnus