Proveedores
Los proveedores son Nest
un concepto fundamental. Muchas Nest
clases básicas pueden considerarse proveedores: service
, repository
, factory
, helper
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 Nest
sistema 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 { }