Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
倒置';像angular';s使用TS装饰器_Angular_Typescript_Dependency Injection_Decorator_Inversifyjs - Fatal编程技术网

倒置';像angular';s使用TS装饰器

倒置';像angular';s使用TS装饰器,angular,typescript,dependency-injection,decorator,inversifyjs,Angular,Typescript,Dependency Injection,Decorator,Inversifyjs,今天,我将一个js electron项目切换到typescript,问自己是否有与angular的依赖注入等价的东西。由于Angular Universal似乎处于非常早期的状态,并且没有任何文档将其与electron而不是express一起使用,因此inversify似乎可以满足我的需要。还因为它比角度更轻,因为我只需要DI 我最终尝试创建一个decorator,该decorator的工作原理与Angular中的NgModuledecorator类似 从“electron”导入{app,Men

今天,我将一个js electron项目切换到typescript,问自己是否有与angular的依赖注入等价的东西。由于Angular Universal似乎处于非常早期的状态,并且没有任何文档将其与electron而不是express一起使用,因此inversify似乎可以满足我的需要。还因为它比角度更轻,因为我只需要DI

我最终尝试创建一个decorator,该decorator的工作原理与Angular中的
NgModule
decorator类似

从“electron”导入{app,Menu,ipcMain,BrowserWindow};
从“inversify”导入{Container};
从“core/database.service”导入{DatabaseService};
函数servermodule(数据:{providers:Array}){
//一些实例化声明数组类的代码
//如果我不需要推荐人,他们必须被退回吗?
让容器=新容器();
返回(目标:对象)=>{
for(数据提供者的常量服务){
container.bind(service.toSelf();
}
}
}
循环遍历提供者中的每个条目,并将其绑定到inversifys容器对象。这个函数我想使用如下。然后,用法将完全与angulars decorator中的用法相同

@servermodule({
声明:[
//其他一些类,可能可以注入DatabaseService
],
供应商:[
数据库服务
]
})
导出类AppModule{。。。
例如,
DatabaseService
可以如下所示

@Component()
export class MyComponent {
  constructor (@Inject(MyService) myService: MyService) {}
}
从'inversify'导入{injectable};
@可注射()
导出类数据库服务{。。。
并且应该以角度样式注射,例如

从'inversify'导入{inject};
从“./database.service”导入{DatabaseService};
导出类模型{
构造函数(@inject(DatabaseService)dbService:DatabaseService){}
}
我不确定inversify的容器。它的作用域是否仅限于decorator函数?将其用作

container = new Container({ autoBindInjectable: true });
如何正确地将其返回到
AppModule
?在servermodule decorator中声明类是一个好主意吗

现在,我只得到关于tsc和electron执行的以下错误消息,但没有ts linting错误

App threw an error during load
Error: Cannot find module 'database.service'
另一个想法/问题是:如果我想在声明和提供者之外添加一个import属性,那么由decorator修改构造函数并导入这些类是一个好主意吗


谢谢!

关于这个问题,半年前,我致力于为一个分层DI实现装饰函数,该DI看起来类似于角度DI,并将它们捆绑在一个组件中。使用它,您可以生成模块

fl模块({
导入:[AnotherModule]//导入其他模块
providers:[MyService]//将Injectables()添加到模块容器中
声明:[]//与提供程序相同,但立即创建实例
导出:[//将可注入()放在父容器中
})
导出类MyModule{}
另一个模块可能看起来像

@Component()
export class MyComponent {
  constructor (@Inject(MyService) myService: MyService) {}
}
fl模块({
声明:[MyComponent]
})
导出类AnotherModule{}
组件可能看起来像

@Component()
export class MyComponent {
  constructor (@Inject(MyService) myService: MyService) {}
}
注意服务。服务是在父模块中提供的,因此这是分层的