dry-rb_autoinject 和 GraphQL
dry-rb_autoinject and GraphQL
我正在尝试制作 GraphQL API,但也通过 dry-rb_autoinject 实现依赖注入。我设法通过控制器和上下文来做到这一点。这是我的测试 QueryType。
Types::QueryType = GraphQL::ObjectType.define do
name "Query"
# Add root-level fields here.
# They will be entry points for queries on your schema.
# TODO: remove me
field :testField, types.String do
description "An example field added by the generator"
resolve ->(obj, args, ctx) {
ctx[:services][:output_service].()
}
end
end
而在 graphql_controller 我只是做
class GraphqlController < ApplicationController
include IMPORT[:output_service]
def execute
...
services: {
output_service: output_service
}
...
但是这个解决方案似乎不太好,因为我导入了所有服务,即使是当前字段不需要的服务。有没有更好的方法,也许不是通过上下文?
最好的解决方案,显然是为每个根字段编写解析器函数并在那里注入,因为解析器函数是 class 继承自 GraphQL::Function
我正在尝试制作 GraphQL API,但也通过 dry-rb_autoinject 实现依赖注入。我设法通过控制器和上下文来做到这一点。这是我的测试 QueryType。
Types::QueryType = GraphQL::ObjectType.define do
name "Query"
# Add root-level fields here.
# They will be entry points for queries on your schema.
# TODO: remove me
field :testField, types.String do
description "An example field added by the generator"
resolve ->(obj, args, ctx) {
ctx[:services][:output_service].()
}
end
end
而在 graphql_controller 我只是做
class GraphqlController < ApplicationController
include IMPORT[:output_service]
def execute
...
services: {
output_service: output_service
}
...
但是这个解决方案似乎不太好,因为我导入了所有服务,即使是当前字段不需要的服务。有没有更好的方法,也许不是通过上下文?
最好的解决方案,显然是为每个根字段编写解析器函数并在那里注入,因为解析器函数是 class 继承自 GraphQL::Function