处理使用typescript在类实例化中反转@inject()参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理使用typescript在类实例化中反转@inject()参数相关的知识,希望对你有一定的参考价值。
尝试使用Inversify实现DI,在进行依赖注入时,我不清楚如何在没有任何参数的情况下实现类实例化。这几乎等同于角度DI。在角度中,可以构造包含注入的类,而不包含任何@Inject参数。
app.module.ts
import { Container } from 'inversify';
export class AppModule {
constructor() {
let container = new Container(); // maybe use { autoBindInjectable: true }
const instance = new DatabaseService(); // DatabaseService is injectable
}
}
根模块创建Inversify Container
并收集所有可注入的类实例。 DatabaseService
类应包含所有数据库操作,并具有@injectable
装饰器。
models.ts
import { DatabaseService } from './database.service';
import { inject } from 'inversify';
export class Models {
constructor(@inject(DatabaseService) dbService: DatabaseService) {}
}
Models
获得了DatabaseService
的可注射实例。在另一个类中,我现在想要创建Models
的实例。如何在没有任何参数的情况下实现类实例化?喜欢它是有角的。
myclass.ts
import { Models } from './models.component'
export class MyClass {
constructor() {
models = new Models() // Want no constructing parameters!
}
}
你有什么想法或建议吗?谢谢!
答案
您可以简单地使用Angular本身提供的内容,而不是使用Inversify。创建一个可以处理应用程序实例的新模块:
@NgModule({
providers: [
DatabaseService
]
})
export class CoreModule {
constructor (@Optional() @SkipSelf() private parentModule: CoreModule) {
if (parentModule) {
throw new Error('CoreModule already loaded');
}
}
}
在构造函数中检查是可选的,但阻止CoreModule
被加载两次,确保您的注射剂只有1个实例。
然后将此模块导入AppModule
:
@NgModule({
imports: [
CoreModule
]
})
export class AppModule {}
现在你可以完全放弃Inversify。
以上是关于处理使用typescript在类实例化中反转@inject()参数的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 不会在 WebSocket 实例化中捕获错误
如何在不选择模式配置参数的情况下使用 mongoose 在 MongoDB 模式实例化中的关联数组/对象中执行 foreach?