【发布时间】:2021-01-03 20:06:29
【问题描述】:
我正在尝试扩展 Type-GraphQL 提供的解析器继承示例,但将静态数据替换为 TypeORM 存储库。
下面是 PersonResolver 如何扩展 ResourceResolver 以及它如何将 persons 数组作为 ResourceResolver 构造函数的第二个参数传递。
const persons: Person[] = [
{
id: 1,
name: "Person 1",
age: 23,
role: PersonRole.Normal,
},
{
id: 2,
name: "Person 2",
age: 48,
role: PersonRole.Admin,
},
];
@Resolver()
export class PersonResolver extends ResourceResolver(Person, persons) {
...
}
ResourceResolver 内部
export function ResourceResolver<TResource extends Resource>(
ResourceCls: ClassType<TResource>,
resources: TResource[],
) {
const resourceName = ResourceCls.name.toLocaleLowerCase();
// `isAbstract` decorator option is mandatory to prevent multiple registering in schema
@Resolver(_of => ResourceCls, { isAbstract: true })
@Service()
abstract class ResourceResolverClass {
protected resourceService: ResourceService<TResource>;
constructor(factory: ResourceServiceFactory) {
this.resourceService = factory.create(resources);
}
...
}
在 ResourceServiceFactory 中
@Service()
export class ResourceServiceFactory {
create<TResource extends Resource>(resources?: TResource[]) {
return new ResourceService(resources);
}
}
export class ResourceService<TResource extends Resource> {
constructor(protected resources: TResource[] = []) {}
getOne(id: number): TResource | undefined {
return this.resources.find(res => res.id === id);
}
我想知道实现 ResourceResolver 的最佳方式,但我想从 TypeORM 传递一个存储库,而不是静态数据。
这是原始示例 - https://github.com/MichalLytek/type-graphql/tree/master/examples/resolvers-inheritance。
非常感谢任何帮助或建议。
【问题讨论】:
标签: dependency-injection factory typeorm typegraphql