首页 > 解决方案 > DI:类的构造函数注入如何多次调用

问题描述

有几个类,如何注入TermsExchangeService

import {TermsExchangeService} from './terms-exchange.service';

@injectable()
export class TermsExchangeComponent {
  constructor(
        private termsExchangeService: TermsExchangeService
    ) {}
}

import {TermsExchangeService} from './terms-exchange.service';

@injectable()
export class PurchaseMainComponent {
    constructor(
       private termsExchangeService: TermsExchangeService
    ) {}

和服务如何在PurchaseMainComponentTermsExchangeComponent

@injectable()
export class TermsExchangeService {

    constructor() {
        debugger; // call 2 times!!!
    }
}

我使用autoBindInjectable

var simpleContainer = new Container({ autoBindInjectable: true })

TermsExchangeService调用的循环构造函数中获取组件时:

for (let item = 0; item < components.length; item++) {
   const container = simpleContainer.get(components[item]);
}

为什么要在每个组件中创建对象?以及如何正常注射?

标签: typescriptinversifyjs

解决方案


默认情况下injectable不是单例。

解决这个问题可以添加defaultScope: 'Singleton'

var simpleContainer = new Container(
            { 
               autoBindInjectable: true, 
               defaultScope: 'Singleton'
            }
)

推荐阅读