typescript - 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
) {}
和服务如何在PurchaseMainComponent
和TermsExchangeComponent
@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]);
}
为什么要在每个组件中创建对象?以及如何正常注射?
解决方案
默认情况下injectable
不是单例。
解决这个问题可以添加defaultScope: 'Singleton'
:
var simpleContainer = new Container(
{
autoBindInjectable: true,
defaultScope: 'Singleton'
}
)
推荐阅读
- php - 为什么网页停止加载 .php 文件
- sql - Oracle SQL 更新多个参数
- javascript - 我使用 javascript 应用样式,但是当我应用新样式(在 javascript 中)时,样式不会改变
- azure-data-factory - ADF CI/CD 如何仅将经过测试的项目发布到更高的环境
- python-3.x - 如何停止等待来自另一个协程/任务的输入函数
- react-native - React Native - 顶部栏导航 - 指示器
- c# - 如何让 Canvas 在 WinUI 3 中滚动?
- google-chrome - 我的清单开发 chrome 扩展时出错。没有钥匙
- flutter - Flutter:使用 TweenAnimationBuilder 延迟动画
- html - ngx-datatable 排序无法正常工作