tsyringe 里使用 scoped 共享实例

Api: scoped

import 'reflect-metadata'
import { container, Lifecycle, scoped, injectable } from 'tsyringe'

@scoped(Lifecycle.ResolutionScoped)
@injectable()
class Bar {
  constructor() { }
  x = 1;
}

@injectable()
class Foo {
  constructor(public myBar: Bar) { }
}

@injectable()
class FooBar {
  constructor(public bar: Bar, public foo: Foo) { }
}

const fooBar = container.resolve(FooBar);
fooBar.bar.x = 2;

console.log(fooBar.bar.x === fooBar.foo.myBar.x)
// 输出: true

以上 Bar 类尽管被多次引用,但其实只共享了一个实例