繁体   English   中英

使用打字稿在类实例化时处理 Inversify @inject() 参数

[英]Handling Inversify @inject() parameters at class instantiation using typescript

尝试使用Inversify实现 DI,在进行依赖注入时,我不清楚如何实现没有任何参数的类实例化。 这几乎相当于角度 DI。 在 angular 中,可以构造包含没有任何 @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装饰器。

模型.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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM