什麼是依賴注入?這篇文章帶大家了解一下angular中的依賴注入(DI),詳細介紹AngularDI框架的兩個核心概念:注入器 Injectors和提供者 Provider,希望對大家有幫助!
angular中的依賴注入(DI)
1、概述
依賴注入( Dependency Injection ) 簡稱DI
,是物件導向
程式設計中的一種設計原則
,用來減少程式碼之間的耦合度。 【相關教學推薦:《angular教學》】
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)
EmailSender 類別執行時要使用 MailService 類,EmailSender 類別依賴 MailService 類,MailService 類別是 EmailSender 類別的依賴項。
以上寫法的耦合度太高,程式碼並不健全。如果 MailService 類別改變了參數的傳遞方式,在 EmailSender 類別中的寫法也要跟著改變。
class EmailSender { mailService: MailService constructor(mailService: MailService) { this.mailService = mailService; } } const mailService = new MailService("APIKEY1234567890") const emailSender = new EmailSender(mailService)
在實例化 EmailSender 類別時將它的依賴項透過 constructor 建構函式參數的形式註入到類別的內部,而這種寫法就是依賴注入。
透過依賴注入降了程式碼之間的耦合度,增加了程式碼的可維護性。 MailService 類別中程式碼的變更再也不會影響 EmailSender 類別。
2、DI 框架
Angular 有自己的DI 框架
,它將實作依賴注入的過程隱藏
了,對於開發者來說只需使用很簡單的程式碼就可以使用複雜的依賴注入功能。
在Angular 的DI 框架中有四個核心概念:
#Dependency
:元件要依賴的實例對象,服務實例物件Token
:取得服務實例物件的識別碼#Injector
:注入器,負責建立維護
服務類別的實例物件並向元件中注入
服務實例物件(管理服務物件的建立和取得)。Provider
:配置注入器的對象,指定建立服務實例物件的服務類別和取得實例對象的識別。 (Provider:提供者)
2.1 注入器Injectors
注入器負責建立服務類別實例對象,並將服務類別實例物件注入到需要的組件中。
-
建立注入器
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
-
服務實例的查找類似函數
作用域鏈
,當前級別可以找到就使用當前級別,當前級別找不到去父級中查找const injector = ReflectiveInjector.resolveAndCreate([MailService]) const childInjector = injector.resolveAndCreateChild([]) const mailService1 = injector.get(MailService) const mailService2 = childInjector.get(MailService) console.log(mailService1 === mailService2) // true
#2.2 提供者Provider
-
設定注入器的對象,指定了建立實例物件的服務類別和存取服務實例物件的識別。
const injector = ReflectiveInjector.resolveAndCreate([ { provide: MailService, useClass: MailService } ])
-
存取依賴物件的識別也可以是字串型別
const injector = ReflectiveInjector.resolveAndCreate([ { provide: "mail", useClass: MailService } ]) const mailService = injector.get("mail")
-
useValue
const injector = ReflectiveInjector.resolveAndCreate([ { provide: "Config", useValue: Object.freeze({ APIKEY: "API1234567890", APISCRET: "500-400-300" }) } ]) const Config = injector.get("Config")
將實例物件和外部的參考建立了鬆散耦合關係,外部透過識別獲取實例對象,只要標識保持不變,內部代碼怎麼變都不會影響到外部。
更多程式相關知識,請造訪:程式設計影片! !
以上是angular學習之聊聊依賴注入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

WebStorm Mac版
好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)