Я думаю, что при использовании typedi
и других подобных DI-сред вы должны разделить свои классы на две категории. Первыми категориями будут сервисы: typedi
будет гарантировать, что существует только один экземпляр каждого, typedi
будет создавать эти экземпляры и внедрять все. Вторая категория - это обычные объекты, которые вы создаете и управляете сами.
Итак, если вы хотите создать столько экземпляров Car
, сколько хотите, не используйте для этого DI - вы уже создайте его в сервисе, который имеет прямые ссылки на все, что нужно Car
:
export class Car {
// deleted inject decorator
constructor(private carsController, private carRecipe: string) {
this.carsController.notifyNetwork('HelloWorld, I am created!');
}
}
@Service()
export class CarsController {
@Inject()
private carsNetworkService: CarsFetcherService;
private cars: Car[] = [];
constructor() {
}
createCar() {
const carRecipe = this.carsNetworkService.getRequestSomething();
const car = new Car(this, carRecipe);
this.cars.push(car);
}
notifyNetwork(msg: string) {
this.carsNetworkService.postRequestSomething(msg);
}
}