689
690
acquire(key: string, ...args: unknown[]): IReference<T> {
691
>
let reference = this.references.get(key);
lifecycle.ts
692
>
693
>
if (!reference) {
694
>
reference = { counter: 0, object: this.createReferencedObject(key, ...args) };
695
>
this.references.set(key, reference);
696
>
}
697
>
698
>
const { object } = reference;
699
>
const dispose = createSingleCallFunction(() => {
700
if (--reference.counter === 0) {
701
this.destroyReferencedObject(key, reference.object);
702
this.references.delete(key);
703
}
705
>
706
>
reference.counter++;
707
>
708
>
return { object, dispose };
709
>
}
710
711
protected abstract createReferencedObject(key: string, ...args: unknown[]): T;