1. 程式人生 > >Angular4--依賴注入

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元件中使用這個服務時就會new一個ProductService類,但如果這個元件被用到了另一個地方,需要的服務改變了,我們就不得不更改元件中的內容,這樣的元件不能說是可複用的。用了依賴注入,這樣的情況就不再會發生了。

如果現在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