3

我目前正在探索 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 无法解析,因为它缺少无参数构造函数,这让我认为它是通过反射而不是通过容器构造的。关于如何进行的任何建议?

谢谢!

4

1 回答 1

2

问题出在架构中。您必须有一个在容器中注册的 ISchema 的实现。您还需要IDependencyResolver在 GraphQl 库 ( GraphQL.IDependencyResolver) 中注册一个实现,该实现是一个接口,如下所示:

 builder.Register<IDependencyResolver>(c =>
            {
                var context = c.Resolve<IComponentContext>();
                return new FuncDependencyResolver(type => context.Resolve(type));
            });

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

于 2019-04-29T17:13:25.693 回答