Xiaoman Nestjs (Capítulo 10 Proveedor de Nestjs)

Proveedores

Los proveedores son  Nest un concepto fundamental. Muchas  Nest clases básicas pueden considerarse proveedores:  service,  repositoryfactoryhelper etc. Todos están disponibles mediante  la constructor inyección de dependencias. Esto significa que los objetos pueden crear diversas relaciones entre sí, y la capacidad de "conectar" instancias de objetos se puede delegar en gran medida al  Nestsistema de tiempo de ejecución. El proveedor es solo una  @Injectable() clase anotada con un decorador.

1. Uso básico

el módulo introduce el servicio y lo inyecta en los proveedores 

Puede usar el servicio inyectado en el Controlador 

 

2. El segundo uso del servicio (nombre personalizado)

El primer uso es un azúcar sintáctico.

En realidad, su nombre completo es

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController],
  providers: [{
    provide: "Xiaoman",
    useClass: UserService
  }]
})
export class UserModule { }

 Después de personalizar el nombre, debe usar el Inject correspondiente para obtenerlo; de lo contrario, no se encontrará.

 3. Valor de inyección personalizado

a través de useValue

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController],
  providers: [{
    provide: "Xiaoman",
    useClass: UserService
  }, {
    provide: "JD",
    useValue: ['TB', 'PDD', 'JD']
  }]
})
export class UserModule { }

 

 3. Modo de fábrica

Si hay dependencias mutuas o procesamiento lógico entre servicios, se puede usar useFactory

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserService2 } from './user.service2';
import { UserService3 } from './user.service3';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController],
  providers: [{
    provide: "Xiaoman",
    useClass: UserService
  }, {
    provide: "JD",
    useValue: ['TB', 'PDD', 'JD']
  },
    UserService2,
  {
    provide: "Test",
    inject: [UserService2],
    useFactory(UserService2: UserService2) {
      return new UserService3(UserService2)
    }
  }
  ]
})
export class UserModule { }

 

 4. Modo asíncrono

useFactory devuelve una promesa u otra operación asíncrona

import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserService2 } from './user.service2';
import { UserService3 } from './user.service3';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController],
  providers: [{
    provide: "Xiaoman",
    useClass: UserService
  }, {
    provide: "JD",
    useValue: ['TB', 'PDD', 'JD']
  },
    UserService2,
  {
    provide: "Test",
    inject: [UserService2],
    useFactory(UserService2: UserService2) {
      return new UserService3(UserService2)
    }
  },
  {
    provide: "sync",
    async useFactory() {
      return await  new Promise((r) => {
        setTimeout(() => {
          r('sync')
        }, 3000)
      })
    }
  }
  ]
})
export class UserModule { }

 

Supongo que te gusta

Origin blog.csdn.net/qq1195566313/article/details/126494064
Recomendado
Clasificación