Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why use `deps` property in DI

Here is the code snippet from angular.io:

{ provide: RUNNERS_UP,    useFactory:  runnersUpFactory(2), deps: [Hero, HeroService] }

...

export function runnersUpFactory(take: number) {
  return (winner: Hero, heroService: HeroService): string => {
    /* ... */
  };
};

My question is why deps property is used here? What are the general cases for using deps?

like image 641
Max Koretskyi Avatar asked Jan 24 '17 06:01

Max Koretskyi


1 Answers

This is a way to tell Angular dependency injections what dependencies it needs to inject to the factory function returned by runnersUpFactory.

For services there is the @Injectable() class to tell DI that it needs to analyze the constructor parameter of this class (same for @Component(), @Directive(), and @Pipe()), but this seems not to work for functions. Therefore they introduced the deps parameter.

DI will look up a provider using the key Hero and another one using HeroService and then will pass them as parameters to the factory function in the same order.

https://angular.io/docs/ts/latest/api/core/index/FactoryProvider-interface.html

deps : any[] A list of tokens which need to be resolved by the injector. The list of values is than used as arguments to the useFactory function.

like image 59
Günter Zöchbauer Avatar answered Oct 01 '22 04:10

Günter Zöchbauer