gpt4 book ai didi

typescript - 使用 typescript 在类实例化时处理 Inversify @inject() 参数

转载 作者:行者123 更新时间:2023-12-03 12:26:28 26 4
gpt4 key购买 nike

尝试使用 Inversify 实现 DI,尚不清楚在进行依赖注入(inject)时如何在没有任何参数的情况下实现类实例化。这几乎等同于角度 DI。在 Angular 中,一个能够构建包含注入(inject)的类而无需任何 @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并收集所有可注入(inject)的类实例。 DatabaseService类应该包含所有的数据库操作并且有一个 @injectable装饰师。

模型.ts

import { DatabaseService } from './database.service';
import { inject } from 'inversify';

export class Models {
constructor(@inject(DatabaseService) dbService: DatabaseService) {}
}
Models获取 DatabaseService 的可注入(inject)实例.在另一个类中,我现在想创建 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从被加载两次,确保您的注入(inject)剂只有 1 个实例。

然后将此模块导入 AppModule :
@NgModule({
imports: [
CoreModule
]
})

export class AppModule {}

现在您可以完全放弃 Inversify。

关于typescript - 使用 typescript 在类实例化时处理 Inversify @inject() 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49031045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com