Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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
Javascript Nest.js中的多重注入_Javascript_Node.js_Nestjs_Inversifyjs - Fatal编程技术网

Javascript Nest.js中的多重注入

Javascript Nest.js中的多重注入,javascript,node.js,nestjs,inversifyjs,Javascript,Node.js,Nestjs,Inversifyjs,在Inversify.js中有multiInjectdecorator,允许我们将多个对象作为数组注入。此数组中所有对象的依赖关系也已解决 在Nest.js中有什么方法可以实现这一点吗?没有直接等同于多注入的方法。您可以为阵列提供以下选项: 例子 试试这个例子吧 注射剂 假设您有多个@可注射的类实现接口Animal export interface Animal { makeSound(): string; } @Injectable() export class Cat implemen

在Inversify.js中有
multiInject
decorator,允许我们将多个对象作为数组注入。此数组中所有对象的依赖关系也已解决


在Nest.js中有什么方法可以实现这一点吗?

没有直接等同于
多注入的方法。您可以为阵列提供以下选项:

例子 试试这个例子吧

注射剂 假设您有多个
@可注射的
类实现接口
Animal

export interface Animal {
  makeSound(): string;
}

@Injectable()
export class Cat implements Animal {
  makeSound(): string {
    return 'Meow!';
  }
}

@Injectable()
export class Dog implements Animal {
  makeSound(): string {
    return 'Woof!';
  }
}
模块 类
Cat
Dog
都可在您的模块中使用(提供或从其他模块导入)。现在为
动物的数组创建一个自定义标记:

providers: [
    Cat,
    Dog,
    {
      provide: 'MyAnimals',
      useFactory: (cat, dog) => [cat, dog],
      inject: [Cat, Dog],
    },
  ],
控制器 然后,您可以在控制器中注入并使用
动物
数组,如下所示:

constructor(@Inject('MyAnimals') private animals: Animal[]) {
  }

@Get()
async get() {
  return this.animals.map(a => a.makeSound()).join(' and ');
}

如果
Dog
具有其他依赖项,如
Toy
,只要模块中有
Toy
可用(导入/提供),则此功能也有效:


只需对@kim kern的伟大解决方案进行一个小调整,您就可以使用该解决方案,但可以避免添加新条目的一点开销

替换

providers: [
    Cat,
    Dog,
    {
      provide: 'MyAnimals',
      useFactory: (cat, dog) => [cat, dog],
      inject: [Cat, Dog],
    },
  ],

这只是一个小问题,但不是必须在3位置添加一个新的,而是减少到2。当您有一些错误时,这些错误就会增加,并减少出错的机会


nest团队也在努力简化这一过程,您可以通过github问题进行跟踪:

我希望我能多次投票;)
providers: [
    Cat,
    Dog,
    {
      provide: 'MyAnimals',
      useFactory: (cat, dog) => [cat, dog],
      inject: [Cat, Dog],
    },
  ],

providers: [
    Cat,
    Dog,
    {
      provide: 'MyAnimals',
      useFactory: (...animals: Animal[]) => animals,
      inject: [Cat, Dog],
    },
  ],