@Service
- @Service() — plugin DI container ထဲတွင် singleton အဖြစ် inject လုပ်နိုင်သော service ကို မှတ်ပုံတင်ပါသည်
- ထို class ကို @Module({ providers: [...] }) ထဲတွင် စာရင်းသွင်းရပါသည်
@Inject
Property ပေါ်တွင်သာ @Inject ကို အသုံးပြုရပါသည် — constructor injection ကို မထောက်ပံ့ပါ။ @Inject(Service) သည် တူညီသော plugin အတွင်းမှ ယူခြင်းဖြစ်ပြီး၊ @Inject(Service, "other-plugin") သည် အခြား plugin မှ ယူခြင်းဖြစ်ပါသည်။
- @Inject(MyService) — လက်ရှိ plugin မှ inject လုပ်ပါသည်
- @Inject(MyService, "other-plugin") — အခြား plugin မှ inject လုပ်ပါသည်
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}Circular service injection
အပြန်အလှန် import လုပ်ပြီး @Inject(OtherService) သုံးပါက ESM TDZ ပြဿနာ ဖြစ်နိုင်ပါသည်။ Lazy ref နှင့် InstanceType ကို အသုံးပြု၍ design:type က class ကို တိုက်ရိုက် မညွှန်းစေရန် ပြုရပါသည်။
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}