【发布时间】:2018-02-28 13:45:48
【问题描述】:
尝试使用 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 装饰器。
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!
}
}
您有什么想法或建议吗?谢谢!
【问题讨论】:
-
您到底为什么要使用 inversify?它有什么作用?
-
@Chrillewoodz 我想为我的电子应用程序使用像 DI 一样的角度。例如。 DatabaseService 应该被注入到多个类中,但我只想在整个应用程序中处理它的单个实例。
-
你已经可以做到了。只需将服务添加到
app.module.ts中的providers,它将只有1 个实例。 -
你的意思是像这个example吗?
-
没有。检查我的答案。
标签: typescript dependency-injection constructor electron inversifyjs