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

使用typescript在类实例化时处理Inversify@inject()参数,typescript,dependency-injection,constructor,electron,inversifyjs,Typescript,Dependency Injection,Constructor,Electron,Inversifyjs,尝试使用Inversify实现DI时,不清楚如何在没有任何参数的情况下实现依赖项注入时的类实例化。这几乎相当于angulars DI。在angular中,angular one能够构造包含注入的类,而无需任何@Inject参数 应用程序模块.ts 从'inversify'导入{Container}; 导出类AppModule{ 构造函数(){ let container=new container();//可能使用{autoBindInjectable:true} const instance=

尝试使用Inversify实现DI时,不清楚如何在没有任何参数的情况下实现依赖项注入时的类实例化。这几乎相当于angulars DI。在angular中,angular one能够构造包含注入的类,而无需任何@Inject参数

应用程序模块.ts

从'inversify'导入{Container};
导出类AppModule{
构造函数(){
let container=new container();//可能使用{autoBindInjectable:true}
const instance=new DatabaseService();//DatabaseService是可注入的
}
}
根模块创建一个Inversify
容器,该容器收集所有可注入类实例化。
DatabaseService
类应包含所有数据库操作,并具有一个
@injectable
装饰器

型号。ts

从“/database.service”导入{DatabaseService};
从'inversify'导入{inject};
导出类模型{
构造函数(@inject(DatabaseService)dbService:DatabaseService){}
}
模型
获取
数据库服务
的可注入实例。在另一个类中,我现在想创建
模型的一个实例。如何在没有任何参数的情况下实现类安装?就像是在角上

myclass.ts

从'./Models.component'导入{Models}
导出类MyClass{
构造函数(){
models=newmodels()//不需要构造参数!
}
}

你有什么想法或建议吗?谢谢

您可以简单地使用Angular本身已经提供的内容,而不是使用Inversify。创建一个新模块,用于处理应用程序的实例:

@NgModule({
  providers: [
    DatabaseService
  ]
})

export class CoreModule {

  constructor (@Optional() @SkipSelf() private parentModule: CoreModule) {

    if (parentModule) {
      throw new Error('CoreModule already loaded');
    }
  }
}
构造函数中的检查是可选的,但是可以防止
CoreModule
被加载两次,从而确保您的可注入项只有一个实例

然后将此模块导入到
AppModule

@NgModule({
  imports: [
    CoreModule
  ]
})

export class AppModule {}

现在您可以完全放弃Inversify。

您到底为什么要使用Inversify?它是做什么的?@Chrillewoodz我想在我的电子应用中有一个像DI一样的角度。例如,DatabaseService应该被注入到多个类中,但我只想在完整的应用程序中处理它的一个实例。你已经可以这样做了。只需将服务添加到
app.module.ts
中的
providers
,它将只有一个实例。你的意思是像这样吗?不。检查我的答案。是的,我知道如何使用angular DI,但我想避免它,因为它完全是多余的。我只需要用angulars的方式。如果没有办法的话,我会试试你的解决办法。我不明白这是何等的过分。你不是在用棱角吗?因为现在你要为Angular已经提供的东西包含一个完整的库。我不明白你想达到什么目的。不,我没有在我的电子“后端”项目中使用angular。我正在使用angular创建前端,并在我的电子应用程序中使用其输出。另外,我不熟悉在没有angular CLI和任何html模板输出的情况下使用angular,而只是传输typescript。如果可能的话,那就太棒了。好吧,那我真的不知道,因为我从来没有用过电子。也许最好从问题中去掉有角度的标记,因为它很令人困惑。我以为你是想在角度环境中创建一个单例服务,而不是电子。使用角度标签,因为我想实现像DI一样的角度。