Demo

Service

@Service() ဖြင့် inject လုပ်နိုင်သော service class ကို သတ်မှတ်ပြီး၊ plugin ၏ @Module providers စာရင်းတွင် မှတ်ပုံတင်ရပါသည်။ အခြား component များက @Inject ဖြင့် ယူသုံးနိုင်ပါသည်။ Constructor injection ကို မထောက်ပံ့ပါ။

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