@Service
- @Service() — 在插件 DI 容器中注册一个单例可注入服务
- 将该类加入 @Module({ providers: [...] })
@Inject
仅使用属性 @Inject — 不支持构造函数注入。@Inject(Service) 为同插件;@Inject(Service, "other-plugin") 为跨插件。
- @Inject(MyService) — 从当前插件注入
- @Inject(MyService, "other-plugin") — 从其他插件注入
TSXinject
1import {
2 Controller,
3 Inject,
4 PartnerService,
5} from "@quan-erp/shared-backend-core";
6import { RewardPointService } from "./reward-point.service.js";
7
8@Controller("/reward-point")
9export class RewardPointController {
10 @Inject(RewardPointService)
11 service: RewardPointService;
12
13 // cross-plugin
14 @Inject(PartnerService, "base")
15 partnerService: PartnerService;
16}循环服务注入
互相 import + @Inject(OtherService) 可能触发 ESM TDZ。使用懒引用与 InstanceType,避免 design:type 直接指向类。
TSXlazy inject
1import { Inject, Service, UserService } from "@quan-erp/shared-backend-core";
2
3@Service()
4export class ChangeLogService {
5 @Inject(() => UserService)
6 userService: InstanceType<typeof UserService>;
7}示例
TSXservice
1import { Service } from "@quan-erp/shared-backend-core";
2
3@Service()
4export class LocationService {
5 async list() {
6 // domain logic
7 }
8}