Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.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
Typescript 动态';提供';服务_Typescript_Angular_Dependency Injection - Fatal编程技术网

Typescript 动态';提供';服务

Typescript 动态';提供';服务,typescript,angular,dependency-injection,Typescript,Angular,Dependency Injection,在我的项目中,我有各种实现“服务”接口的服务,因此我知道每个服务都有findAll、find、create、(CRUD)等。。方法 现在我正在编写一个组件,您可以动态地附加到这些服务中的一个,它将调用findAll方法并从服务中检索所有实体 我正在使用webpack动态请求服务: ngOnInit() { // Load context for serice API directory: let req = require.context('../../../../a

在我的项目中,我有各种实现“服务”接口的服务,因此我知道每个服务都有
findAll
find
create
、(CRUD)等。。方法

现在我正在编写一个组件,您可以动态地附加到这些服务中的一个,它将调用
findAll
方法并从服务中检索所有实体

我正在使用webpack动态请求服务:

  ngOnInit() {
      // Load context for serice API directory:
      let req = require.context('../../../../api', true, /^\.\/.*\.ts$/);
      // Let's load the service (synchronously)
      let service: Service = req('./' + serviceName + 'ApiService.ts')
太好了!现在,
service
包含了我的服务。现在我只需要
提供
it,因为这些服务并没有全部添加到引导过程中,只是按需使用

因此,我的问题是;如何从组件中动态地“提供”服务?(完成此操作后,我将使用
injector.get
检索服务实例。我要执行以下等效操作:

provide:service
在我的组件中,但是很明显,因为我已经在
ngOnInit()
中了,现在做这个已经太晚了


编辑;似乎,从:没有干净的解决方案。但我会得到纠正。

在这里大声说出来:创建一个服务,它接受
serviceName
,返回对象。然后在组件的
提供程序
数组中使用该服务并使用它?这看起来像是XY问题。为什么组件(控制器)会这样做定义服务?这不是它的工作。@estus我不确定你是否理解这个问题。定义服务从来不是组件的工作-我只需要它的引用/实例。这是一个DI问题。你能编写自己的factory服务提供程序吗?请参阅此处的useFactory:“使用此技术创建具有工厂函数的依赖项对象,工厂函数的输入是注入服务和本地状态的某种组合。“您想将一些服务分配给
provide
,并使其可在当前注入器上注入。如果不能调用此函数“定义服务”,那么可以做什么?引用其他服务的代理服务仍然是一个服务(顺便说一句,
require
获取可注入的而不仅仅是一个类)。这个问题没有解释为什么应该在组件内执行此操作。顺便说一句,您所指的问题与主题无关,而是关于在服务中访问injector。问题是关于具有自己的injector的组件。