GraphQL + Autofac - PullRequest
       9

GraphQL + Autofac

1 голос
/ 29 апреля 2019

Я сейчас изучаю 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 не может быть решен, так как в нем отсутствует конструктор без параметров, что заставляет меня думать, что он был создан с помощью отражения, а не с помощью контейнера.Любые предложения о том, как поступить?

Спасибо!

1 Ответ

0 голосов
/ 29 апреля 2019

Проблема была в схеме. У вас должна быть реализация 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.

...