小满nestjs(第十章 nestjs 提供者)

简介: 如果服务 之间有相互的依赖 或者逻辑处理 可以使用 useFactory

Providers


Providers 是 Nest 的一个基本概念。许多基本的 Nest 类可能被视为 provider - service, repository, factory, helper 等等。 他们都可以通过 constructor 注入依赖关系。 这意味着对象可以彼此创建各种关系,并且“连接”对象实例的功能在很大程度上可以委托给 Nest运行时系统。 Provider 只是一个用 @Injectable() 装饰器注释的类。


1.基本用法


module 引入 service  在 providers 注入


bb29915e1e9b4b14a8547cd41022e260.png


在Controller 就可以使用注入好的service 了


7882400e265e48dcad985b9a63e85ef6.png


2.service 第二种用法(自定义名称)


第一种用法就是一个语法糖


其实他的全称是这样的


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 { }

2ec413ea8a1f4ae6a90f0a20ded1407c.png


自定义名称之后 需要用对应的Inject 取 不然会找不到的


2a731c48c2b445cdb3821a782a2222ca.png


3.自定义注入值


通过 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 { }


a5803c28b336479b9b973e6655facca1.png


c29fcb2806ab498a804762300e07f823.png


3.工厂模式


如果服务 之间有相互的依赖 或者逻辑处理 可以使用 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 { }


c7e4901a7b6a4f1abf74984b457f7ba9.png


7f1888320de249208a3e0e324bbe7903.png


4.异步模式


useFactory 返回一个promise 或者其他异步操作


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 { }


90fb36c676484b698c83b7e62e4b4328.png


目录
相关文章
|
5天前
|
数据库
小满nestjs(第二十八章 nestjs 事务)
小满nestjs(第二十八章 nestjs 事务)
103 0
小满nestjs(第二十八章 nestjs 事务)
小满nestjs(第十一章 nestjs 模块)
每个 Nest 应用程序至少有一个模块,即根模块。根模块是 Nest 开始安排应用程序树的地方。事实上,根模块可能是应用程序中唯一的模块,特别是当应用程序很小时,但是对于大型程序来说这是没有意义的。在大多数情况下,您将拥有多个模块,每个模块都有一组紧密相关的功能
93 0
小满nestjs(第十一章 nestjs 模块)
|
中间件
小满nestjs(第十二章 nestjs 中间件)
中间件是在路由处理程序 之前 调用的函数。 中间件函数可以访问请求和响应对象
181 0
小满nestjs(第十二章 nestjs 中间件)
|
前端开发 测试技术 API
小满nestjs(第八章 nestjs 控制器)
小满nestjs(第八章 nestjs 控制器)
156 0
小满nestjs(第八章 nestjs 控制器)
|
存储 JSON 关系型数据库
小满nestjs(第二十五章 nestjs 实体)
nullable: boolean - 在数据库中使列NULL或NOT NULL。 默认情况下,列是nullable:false。
215 0
小满nestjs(第二十五章 nestjs 实体)
|
前端开发
小满nestjs(第九章 nestjs Session)
session 是服务器 为每个用户的浏览器创建的一个会话对象 这个session 会记录到 浏览器的 cookie 用来区分用户
259 0
小满nestjs(第九章 nestjs Session)
|
JavaScript API
小满nestjs(第十五章 nestjs 和 RxJs)
nterval 五百毫秒执行一次 pipe 就是管道的意思 管道里面也是可以去掉接口的支持处理异步数据 去处理数据 这儿展示 了 map 和 filter 跟数组的方法是一样的 最后 通过观察者 subscribe 接受回调
74 0
小满nestjs(第十五章 nestjs 和 RxJs)
|
前端开发
小满nestjs(第十九章 nestjs 管道验证DTO)
小满nestjs(第十九章 nestjs 管道验证DTO)
128 0
小满nestjs(第十九章 nestjs 管道验证DTO)
|
前端开发
小满nestjs(第二十七章 nestjs typeOrm关系)
在我们开始的过程中,肯定不会把数据存在一个表里面,我们会进行分表,把数据分开存,然后通过关联关系,联合查询。
181 0
小满nestjs(第二十七章 nestjs typeOrm关系)
|
前端开发
小满nestjs(第二十六章 nestjs 第一个CURD)
小满nestjs(第二十六章 nestjs 第一个CURD)
70 0