Я хотел бы подкрепить свои репозитории кэшем в области запросов, аналогичном кеш первого уровня Hibernate .У меня есть несколько идей о том, как это сделать, и я привяжу это к typeorm -actional-cls-hooked .
Тем временем я создал простого провайдера следующим образом:
@Injectable({ scope: Scope.REQUEST })
export class RequestScopedCache extends Object {
private storage: any = {};
public set(key: string, value: any) {
this.storage[key] = value;
}
public get(key: string) {
return this.storage[key];
}
}
Я хотел внедрить его в свой пользовательский репозиторий:
@Injectable()
@EntityRepository(Enqueued)
export class EnqueuedRepository extends Repository<Enqueued> {
@Inject() readonly cache: RequestScopedCache;
public async get(id: string) {
const key = `${this.constructor.name}_${id}`;
const result = this.cache.get(key);
if (result) {
return result;
}
const dbResult = await super.findOne(id);
this.cache.set(key, dbResult);
return dbResult;
}
}
Ни внедрение конструктора, ни свойствоВнедрение работает на пользовательский репозиторий.Похоже, что все было спланировано так, что вызывается специфический для typeorm конструктор (который кажется закрытым) - первый введенный параметр выглядит как соединение.
Итак, я попробовал внедрение свойств, но это тоже не сработало.
Как я могу внедрить свою собственную конфигурацию в пользовательский репозиторий?