GraphQL + Autofac

GraphQL + Autofac

我目前正在探索 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));
            });

最后,确保您的所有 schemasqueriestypes 都已在 autofac 中注册。