В данный момент я изучаю GraphQL. В одном из моих ObjectGraphTypes я хочу внедрить реализацию службы, которая запрашивает EF о некоторых дополнительных данных.
public class RoomType : ObjectGraphType<Room>
{
public RoomType(IUserRepository userRepository)
{
Field(x => x.Id).Description("Identifier for a room");
Field(x => x.Name).Description("Name of the room");
Field<ListGraphType<UserType>, IEnumerable<User>>().Name("Users").Resolve(ctx =>
{
var roomId = ctx.Source.Id;
return userRepository.GetUsersInRoom(roomId);
});
}
}
Где и RoomType, и IUserRepository были зарегистрированы в контейнере Autofac. Однако во время выполнения RoomType не может быть разрешен, так как в нем отсутствует конструктор без параметров, что наводит меня на мысль, что он был построен с помощью отражения, а не с помощью контейнера. Любые предложения о том, как действовать?
Спасибо!





Проблема была в схеме. У вас должна быть реализация ISchema, которая зарегистрирована в контейнере. Вам также необходимо зарегистрировать реализацию IDependencyResolver, которая представляет собой интерфейс в библиотеке GraphQl (GraphQL.IDependencyResolver), например:
builder.Register<IDependencyResolver>(c =>
{
var context = c.Resolve<IComponentContext>();
return new FuncDependencyResolver(type => context.Resolve(type));
});
В конце убедитесь, что все ваши schemas, queries и types зарегистрированы в autofac.