Apakah suntikan pergantungan? Artikel ini akan membawa anda melalui suntikan pergantungan (DI) dalam sudut dan memperkenalkan secara terperinci dua konsep teras rangka kerja AngularDI: penyuntik dan pembekal saya harap ia akan membantu anda!
Ikhtisar
Suntikan Ketergantungan (Dependency Injection), dirujuk sebagai DI
, ialah sejenis pengaturcaraan 面向对象
yang digunakan untuk mengurangkan 设计原则
darjah gandingan antara kod. [Cadangan tutorial berkaitan: "tutorial sudut"]
class MailService { constructor(APIKEY) {} } class EmailSender { mailService: MailService constructor() { this.mailService = new MailService("APIKEY1234567890") } sendMail(mail) { this.mailService.sendMail(mail) } } const emailSender = new EmailSender() emailSender.sendMail(mail)
class EmailSender { mailService: MailService constructor(mailService: MailService) { this.mailService = mailService; } } const mailService = new MailService("APIKEY1234567890") const emailSender = new EmailSender(mailService)
Apabila membuat instance kelas EmailSender, masukkan kebergantungannya ke bahagian dalam kelas melalui parameter pembina pembina Cara penulisan ini ialah suntikan pergantungan.
Melalui suntikan pergantungan, gandingan antara kod dikurangkan dan kebolehselenggaraan kod ditingkatkan. Perubahan kod dalam kelas MailService tidak lagi menjejaskan kelas EmailSender.2. Rangka kerja DI
Angular mempunyai sendiri, yang akan melaksanakan proses suntikan pergantungan DI 框架
, untuk pembangunan Untuk pembangun, anda boleh menggunakan fungsi suntikan kebergantungan yang kompleks dengan kod yang sangat mudah. 隐藏
: objek contoh yang komponen bergantung, objek contoh perkhidmatan Dependency
: Dapatkan identiti objek contoh perkhidmatan Token
: Penyuntik, bertanggungjawab untuk Injector
objek contoh kelas perkhidmatan dan hantarkannya kepada komponen 创建维护
Objek contoh perkhidmatan (menguruskan penciptaan dan pemerolehan objek perkhidmatan). 注入
: Konfigurasikan objek penyuntik, nyatakan kelas perkhidmatan untuk mencipta objek contoh perkhidmatan dan dapatkan pengecam objek contoh. (Penyedia: Pembekal) Provider
import { ReflectiveInjector } from "@angular/core" // 服务类 class MailService {} // 创建注入器并传入服务类 const injector = ReflectiveInjector.resolveAndCreate([MailService])
const mailService = injector.get(MailService)
const mailService1 = injector.get(MailService) const mailService2 = injector.get(MailService) console.log(mailService1 === mailService2) // true
const injector = ReflectiveInjector.resolveAndCreate([MailService]) const childInjector = injector.resolveAndCreateChild([MailService]) const mailService1 = injector.get(MailService) const mailService2 = childInjector.get(MailService) console.log(mailService1 === mailService2) // false
Jika tahap semasa boleh ditemui, gunakan tahap semasa Jika tahap semasa tidak ditemui, cari dalam tahap induk 作用域链
const injector = ReflectiveInjector.resolveAndCreate([MailService]) const childInjector = injector.resolveAndCreateChild([]) const mailService1 = injector.get(MailService) const mailService2 = childInjector.get(MailService) console.log(mailService1 === mailService2) // true
const injector = ReflectiveInjector.resolveAndCreate([ { provide: MailService, useClass: MailService } ])
const injector = ReflectiveInjector.resolveAndCreate([ { provide: "mail", useClass: MailService } ]) const mailService = injector.get("mail")
const injector = ReflectiveInjector.resolveAndCreate([ { provide: "Config", useValue: Object.freeze({ APIKEY: "API1234567890", APISCRET: "500-400-300" }) } ]) const Config = injector.get("Config")
Video Pengaturcaraan! !
Atas ialah kandungan terperinci Pembelajaran sudut bercakap tentang suntikan pergantungan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!