Angular4--依賴注入
【背景】
最近在學習Angular,迫不及待想跟學習到的知識跟大家分享。
【內容】
什麼是依賴注入?
依賴注入是“控制反轉”(將例項化這個類的控制權交給外部,從而實現類與元件的解耦)的一體兩面。控制反轉是目的,依賴注入是手段。是不是不太明白,說得直白一點就是在程式執行過程中,如果需要呼叫另一個物件協助時,無須在程式碼中建立被呼叫者,而是依賴於外部的注入。
怎麼用?
我們在元件需要某個服務的例項時,不需要手動建立這個例項,只需要在建構函式的引數中指定這個例項的變數,以及這個例項的類,然後angular會根據這個類的名字找到providers屬性中指定的同名的provide,再找到它對應的useclass,最終自動建立這個服務的例項。
一、注入器
在元件中的constructor中:
constructor(private productService: ProductService){}
這段程式碼的意思是,這個元件建立了一個productService,而這個productService是依賴ProductService的,這裡的ProductService只是一個token。二、提供器
通常提供器定義在應用級,及app.module.ts中,供所有元件或服務使用,當然也可以定義在某一個元件中,只供這一個元件使用。
// 兩個屬性同名 providers: [ProductService] // 完整寫法 providers: [{provide: ProductService, useClass: ProductService}] // 不同名寫法 providers: [{provide: ProductService, useClass: AnotherProductService}] // 用工廠方式建立這個例項 providers: [{provide: ProductService, useFactory: ()=>{...}}]
這段程式碼中的provide宣告的就是我們剛剛在注入器中提過的token,就是說這兩個token是一一對應的,Angular會到提供器中找到和注入器相同的token。程式碼中的useClass是例項化ProductService類,即幫助我們new了一個類出來,除了useClass外,比較常用的還有useFactory,使用工廠模式例項化一個類,還有useValue。這時候我們在元件中就可以直接使用ProductService類中的方法了。
好處是什麼?
在Angular中使用依賴注入,可以幫助我們實現鬆耦合,實現元件的可重用性。
如果我們有個服務product.service.ts,其中export了一個ProductService類,類中有一個getProducts方法。
如果現在product元件用到了另一個地方需要另一個服務,我們命名為OtherProductService,有了依賴注入之後我們就不必更改元件的內容,只需要更改app.module.ts中的提供器。
@NgModule({
provide: ProductService,
useClass: OtherProductService
})
這段程式碼中,token並沒有改變,可是例項化的類變了。
提供器的作用域原則
1.提供器宣告在模組時是對所有元件是可見的,所有元件都可以注入。
2.當一個提供器宣告在元件時,只對他宣告的元件和子元件可見,其他元件不可注入。
3.當宣告在模組的提供器和元件的提供器具有相同的token時,宣告在元件的提供器會覆蓋模組的提供。
4.服務提供器優先宣告在模組中,只有服務必須在某個元件可見,對其他元件不可見時才宣告在元件中
當元件在建構函式中說明自己想要依賴一個類時,Angular首先會在這個元件自身找看有沒有這個提供器,如果沒有就去這個元件的父元件中找,如果也沒有就去應用級(app.modules.ts)中去找。找到後,就會按照提供器可說明的為元件注入它想要的。【感受】
基礎知識點先一點點總結著,期待破繭成蝶的那一天。
相關推薦
Angular4--依賴注入
【背景】最近在學習Angular,迫不及待想跟學習到的知識跟大家分享。【內容】什麼是依賴注入?依賴注入是“控制反轉”(將例項化這個類的控制權交給外部,從而實現類與元件的解耦)的一體兩面。控制反轉是目的,依賴注入是手段。是不是不太明白,說得直白一點就是在程式執行過程中,如果需要
angular4基礎之服務與依賴注入
服務與依賴注入 依賴注入就是省去了每次手動建立例項的麻煩,自動建立例項。 首先建立一個服務,然後將服務注入到元件使用 注入時需要在類前邊加上@Injectable裝飾器 服務之間可以相互引用
Angular4 第四章 依賴注入實戰
建立服務的命令:ng g service shared/stock ,生成了stockService的服務,需要宣告該服務的提供器 建立元件stock : ng g component stock 1.依賴注入,提供器宣告在模組中 (1)編寫服務提供器。shared
Angular4-線上競拍應用-依賴注入
依賴注入:Dependency Injection 簡稱DI 注入器 constructor(private productServie:ProductService){...} 提供器 providers:[{provider:ProductSe
angular4 服務依賴注入的三種方法
假設有服務authservice,現在要把它注入到我們的元件中。有下列三種方法。 方法一:最簡單直接,直接生產一個該服務的例項物件。 import { Component, OnInit } fro
SpringFramework的核心:IOC容器的實現------IoC容器的依賴注入
如果IoC容器已經載入了使用者定義的Bean資訊,並開始分析依賴注入的原理。依賴注入是使用者第一次向IoC容器索要Bean時觸發的,當然也有例外。如果我們設定了lazy-init的屬性。是可以在剛開始初始化容器的時候就為我們生成新的bean。 首先我們從DefaultListableBean
Asp.net MVC中如何實現依賴注入(DI)(二)
昨天說了一下Castle與Autofac如何在MVC中的使用,今天再來簡單說一下Spring.Net框架在MVC中如何依賴注入的。 官網:http://www.springframework.net/ 專案結構圖: 首先,我們要在專案中新增Spring.Net的類庫引用,我們可以在N
淺談依賴注入
轉載自部落格園一位前輩寫的很不錯的文章 作者: yangecnu(yangecnu’s Blog on 部落格園) 出處:http://www.cnblogs.com/yangecnu/ 淺談依賴注入 最近幾天在看一本名為Dependency Injection in .NET
Spring 學習筆記 - IOC/依賴注入
簡述: Spring 學習 - IOC/依賴注入 1. Bean 的例項化 1) 直接使用原始類建立bean <bean id="exampleBean" class="com.anialy.test.ExampleBean" /> 2) 使用工廠方法建立
PHP 控制反轉與依賴注入詳細分析與程式碼實現
PHP有很多的設計模式,比如單例模式,訂閱模式,策略模式,工廠模式,觀察者模式,這些設計模式其實無非都是為了讓程式簡化,容易維護,模組間解耦。現在我們來講講PHP的另外一種設計模式,控制反轉/依賴注入,這兩者其實是同一個概念,只是凶不同的角度去解釋的而已。 依賴注入:是從需要實現的業務邏輯上面去
深入研究Spring-IoC:原始碼分析依賴注入
1.前言 對於容器建立的過程已經闡述過一遍了,下面是依賴注入的問題。Spring提供的依賴注入的方法主要由兩種:一種是通過getBean的方法;另一種是通過註解@Autowaire。 需要指出的是依賴注入的過程是使用者第一次向ioc容器索要Bean的時候開始生產的,也可以通過設定
PHP規範PSR11(依賴注入容器介面)介紹
本文件描述了依賴注入容器的通用介面。 ContainerInterface設定的目標是標準化框架和庫如何使用容器來獲取物件和引數(在本文件的其餘部分中稱為條目)。 本文件中的關鍵詞“必須”,“必須”,“必需”,“應該”,“不應該”,“應該”,“不應該”,“推薦”,“可以”和“可選”按照RFC
1.Spring、IOC與依賴注入
Spring概述 Spring是分層的Java SE/EE應用 full-stack輕量級開源框架,以IoC(Inverse Of Control:反轉控制)和 AOP(Aspect Oriented Programming:面向切面程式設計)為核心,提供了展現層Spr
3.1依賴注入「深入淺出ASP.NET Core系列」
希望給你3-5分鐘的碎片化學習,可能是坐地鐵、等公交,積少成多,水滴石穿,謝謝關注。 從UML來理解依賴 1.1什麼是依賴 我們先看下圖 可以簡單理解,一個HomeController類使用到了DBContext類,而這種關係是有偶然性,臨時性,弱關係的,但是D
淺談Angular6的服務和依賴注入
在開發中,元件一般用來寫檢視有關的功能,服務則寫一些其他的邏輯,諸如從伺服器獲取資料、驗證使用者輸入或直接往控制檯中寫日誌等工作. 先解釋兩個概念: Providers(提供商):是個比較抽象的名詞,我們把它想象為'圖紙'更好理解一些,就比如我們想要生產汽車,就需要先有汽車的圖紙,圖紙
Angular依賴注入:類“AnotherProductService”錯誤實現類“ProductService”。你是想擴充套件“ProductService”並將其成員作為子類繼承嗎?
在做Angular依賴注入例項時候出現一個問題“類“AnotherProductService”錯誤實現類“ProductService”。你是想擴充套件“ProductService”並將其成員作為子類繼承嗎?”於是找到解決本問題的方法,由於小編剛入門所以不能給大家提供更多的解釋,只提出解決方
依賴注入的兩種常用方式(構造器和Setter)與注入內容(裝配資料)——Spring IOC/DI(三)
本章主要講解一下Spring中依賴注入方式,接上一章依賴注入原理和方式: https://blog.csdn.net/qq_34598667/article/details/83315669 依賴注入常用的兩種方式以及注入的內容(裝配資料) Spring通過DI(依賴注入)實現I
依賴注入原理,作用,注入方式——Spring IOC/DI(二)
依賴注入原理,作用,注入方式 前言 上一章我們講到了IOC和DI概述: https://blog.csdn.net/qq_34598667/article/details/83275560 這一章接上一章繼續講 依賴注入(Dependency Injection)是用於實現控制反
控制反轉與依賴注入概述——Spring IOC/DI(一)
Spring IOC/DI(一)——控制反轉與依賴注入概述 前面我們已經講過了關於spring對bean的管理,下面我們來講一下Spring的核心之一——IOC/DI。相信很多學過Spring同學都有一個問題,就是對控制反轉和依賴注入暈暈乎乎的不太懂,這裡簡單給大家介紹一下到底什麼是
spring 依賴注入的理解
先看一段程式碼假設你編寫了兩個類,一個是人(Person),一個是手機(Mobile)。 人有時候需要用手機打電話,需要用到手機的dialUp方法。 傳統的寫法是這樣: Java code public class Person{ public boolean makeCall(long nu