Custom injecting logic for NestJS with support multi providing

Installation

npm i –save nestjs-custom-injector

Links

https://nestjs-custom-injector.site15.ru/api – Demo application with nestjs-custom-injector.
https://github.com/EndyKaufman/nestjs-custom-injector-example – Example g…


This content originally appeared on DEV Community and was authored by DEV Community

Installation

npm i --save nestjs-custom-injector

Links

https://nestjs-custom-injector.site15.ru/api - Demo application with nestjs-custom-injector.
https://github.com/EndyKaufman/nestjs-custom-injector-example - Example generated with nest cli for "Usage" sections in readme.

Usage

Create common interface with token in animal-provider.interface.ts

export const ANIMAL_PROVIDER = 'ANIMAL_PROVIDER';

export interface AnimalProviderInteface {
  type: string;
  say(): string;
}

Create first type of logic for cats in animal-cats.service.ts

import { Injectable } from '@nestjs/common';
import { AnimalProviderInteface } from './animal-provider.interface';

@Injectable()
export class AnimalCatsService implements AnimalProviderInteface {
  type = 'cat';
  say(): string {
    return 'meow';
  }
}

Create second type of logic for dogs in animal-dogs.service.ts

import { Injectable } from '@nestjs/common';
import { AnimalProviderInteface } from './animal-provider.interface';

@Injectable()
export class AnimalDogsService implements AnimalProviderInteface {
  type = 'dog';
  say(): string {
    return 'woof';
  }
}

Create controller animals.controller.ts

import { Controller, Get, Query } from '@nestjs/common';
import { CustomInject } from 'nestjs-custom-injector';
import {
  AnimalProviderInteface,
  ANIMAL_PROVIDER,
} from './animal-provider.interface';

@Controller('animals')
export class AnimalsController {
  @CustomInject(ANIMAL_PROVIDER, { multi: true })
  private animalProviders!: AnimalProviderInteface[];

  @Get('animal-types')
  animalTypes() {
    return this.animalProviders.map((animalProvider) => animalProvider.type);
  }

  @Get('what-says-animals')
  whatSaysAnimals() {
    return this.animalProviders.map(
      (animal) => `${animal.type} say ${animal.say()}`
    );
  }

  @Get('who-say')
  whoSay(@Query('voice') voice: string) {
    const animal = this.animalProviders.find(
      (animal) => animal.say() === voice
    );
    if (!animal) {
      return { error: `I don't know who say ${voice}` };
    }
    return `${animal.type} say ${animal.say()}`;
  }
}

Append all logic to main app module app.module.ts

import { Module } from '@nestjs/common';
import { CustomInjectorModule } from 'nestjs-custom-injector';
import { AnimalCatsService } from './animal-cats.service';
import { AnimalDogsService } from './animal-dogs.service';
import { AnimalsController } from './animals.controller';

@Module({
  ...
  imports: [
    ...
    CustomInjectorModule.forRoot(),
    CustomInjectorModule.forFeature({
      providers: [{ provide: ANIMAL_PROVIDER, useClass: AnimalCatsService }],
    }),
    CustomInjectorModule.forFeature({
      providers: [
        { provide: ANIMAL_PROVIDER, useValue: new AnimalDogsService() },
      ],
    }),
    ...
  ],
  controllers: [
    ...
    AnimalsController
    ...
  ]
  ...
})
export class AppModule {}


This content originally appeared on DEV Community and was authored by DEV Community


Print Share Comment Cite Upload Translate Updates
APA

DEV Community | Sciencx (2022-02-23T18:06:49+00:00) Custom injecting logic for NestJS with support multi providing. Retrieved from https://www.scien.cx/2022/02/23/custom-injecting-logic-for-nestjs-with-support-multi-providing/

MLA
" » Custom injecting logic for NestJS with support multi providing." DEV Community | Sciencx - Wednesday February 23, 2022, https://www.scien.cx/2022/02/23/custom-injecting-logic-for-nestjs-with-support-multi-providing/
HARVARD
DEV Community | Sciencx Wednesday February 23, 2022 » Custom injecting logic for NestJS with support multi providing., viewed ,<https://www.scien.cx/2022/02/23/custom-injecting-logic-for-nestjs-with-support-multi-providing/>
VANCOUVER
DEV Community | Sciencx - » Custom injecting logic for NestJS with support multi providing. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/02/23/custom-injecting-logic-for-nestjs-with-support-multi-providing/
CHICAGO
" » Custom injecting logic for NestJS with support multi providing." DEV Community | Sciencx - Accessed . https://www.scien.cx/2022/02/23/custom-injecting-logic-for-nestjs-with-support-multi-providing/
IEEE
" » Custom injecting logic for NestJS with support multi providing." DEV Community | Sciencx [Online]. Available: https://www.scien.cx/2022/02/23/custom-injecting-logic-for-nestjs-with-support-multi-providing/. [Accessed: ]
rf:citation
» Custom injecting logic for NestJS with support multi providing | DEV Community | Sciencx | https://www.scien.cx/2022/02/23/custom-injecting-logic-for-nestjs-with-support-multi-providing/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.