Как поделить одно и то же дерево инъекций зависимостей с tsrynge? - PullRequest
0 голосов
/ 28 октября 2019

Мне бы хотелось, чтобы в каждом дочернем контейнере был только один экземпляр каждого класса.

import "reflect-metadata";
import {injectable, container, singleton} from "tsyringe";

const count = {
    bar: 0,
    foo: 0,
    fao: 0
}

@injectable()
class Foo {
    constructor() {
        count.foo += 1;

    }

    public helloWorld() {
        console.log("helloworld")
    }
}

@injectable()
export class Bar {
    constructor(public myFoo: Foo) {
        count.bar += 1;
    }


}

@injectable()
export class FAO {
    constructor(public myFoo: Foo) {
        count.fao += 1;
    }
}

const create = () => {
    const childContainer = container.createChildContainer();
    const myBar = childContainer.resolve(FAO);
    const other = childContainer.resolve(Bar);
}

create();
create();

Я бы хотел, чтобы в моем дочернем контейнере был "singleton". Все классы будут создаваться только один раз для дочернего контейнера. @singleton разрешается только в глобальном контейнере.

Как я могу это сделать?

1 Ответ

0 голосов
/ 29 октября 2019

В дочернем контейнере есть метод registerSingleton

const childContainer= container.createChildContainer();
childContainer.registerSingleton(Foo);

childContainer.resolve(Bar)
...