狠狠色丁香婷婷久久综合麻豆,国产99久久久久久免费看,与亲女洗澡时伦了视频,一面膜胸口一面膜下免费

Angular中依賴注入的示例分析

這篇文章主要介紹Angular中依賴注入的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

成都創新互聯公司專注為客戶提供全方位的互聯網綜合服務,包含不限于網站設計、做網站、洋縣網絡推廣、成都微信小程序、洋縣網絡營銷、洋縣企業策劃、洋縣品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創新互聯公司為所有大學生創業者提供洋縣建站搭建服務,24小時服務熱線:18980820575,官方網址:www.hntjjpw.com

依賴注入:設計模式

依賴:程序里需要的某種類型的對象。

依賴注入框架:工程化的框架

Angular中依賴注入的示例分析

注入器Injector:用它的API創建依賴的實例

Provider:怎樣創建?(構造函數,工程函數)

Object:組件,模塊需要的依賴

依賴性注入進階=>Angular中依賴注入框架提供父子層次注入型依賴

一、依賴注入

class Id {
  static getInstance(type: string): Id {
    return new Id();
  }
}

class Address {
  constructor(provice, city, district, street) {}
}

class Person {
  id: Id;
  address: Address;
  constructor() {
    this.id = Id.getInstance("idcard");
    this.address = new Address("北京", "背景", "朝陽區", "xx街道");
  }
}

問題:Person需要清楚的知道Address和Id的實現細節。

ID和Address重構后,Person需要知道怎么重構。

項目規模擴大后,集成容易出問題。

class Id {
  static getInstance(type: string): Id {
    return new Id();
  }
}

class Address {
  constructor(provice, city, district, street) {}
}

class Person {
  id: Id;
  address: Address;
  constructor(id: Id, address: Address) {
    this.id = id;
    this.address = address;
  }
}

main(){
  //把構造依賴對象,推到上一級,推調用的地方
  const id = Id.getInstance("idcard");
  const address = new Address("北京", "背景", "朝陽區", "xx街道");
  const person = new Person(id , address);
}

Person已經不知道Id和Address的細節了。

這是最簡單的依賴注入。

問題是在main里還是需要知道細節。

思路:一級一級往上推,一直推到入口函數,入口函數來處理所有對象的構造。構造出來后提供給所有依賴的子模塊的子類。

問題:入口函數很難維護。所以需要一個依賴注入框架幫助完成。

二、Angular的依賴注入框架

從v5開始,因為速度慢,引入大量代碼已棄用,改為Injector.create。

ReflectiveInjector:用于實例化對象和解析依賴關系。

import { Component ,ReflectiveInjector } from "@angular/core";

resolveAndCreate接收一個provider數組,provider告訴injector應該怎樣去構造這個對象。

constructor() {
    //接收一個provider數組
    const injector = ReflectiveInjector.resolveAndCreate([
      {
        provide: Person, useClass:Person
      },
      {
        provide: Address, useFactory: ()=>{
          if(environment.production){
            return new Address("北京", "背景", "朝陽區", "xx街道xx號");
          }else{
            return new Address("西藏", "拉薩", "xx區", "xx街道xx號");
          }
        }
      },
      {
        provide: Id, useFactory:()=>{
          return Id.getInstance('idcard');
        }
      }
    ]);
  }

Injector

injector相當于main函數,可以拿到所有依賴池子里的東西。

import { Component ,ReflectiveInjector, Inject} from "@angular/core";
import { OverlayContainer } from "@angular/cdk/overlay";
import { Identifiers } from "@angular/compiler";
import { stagger } from "@angular/animations";
import { environment } from 'src/environments/environment';

@Component({
  selector: "app-root",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.scss"]
})
export class AppComponent {

  constructor(private oc: OverlayContainer) {
    //接收一個provider數組
    const injector = ReflectiveInjector.resolveAndCreate([
      {
        provide: Person, useClass:Person
      },
      {
        provide: Address, useFactory: ()=>{
          if(environment.production){
            return new Address("北京", "背景", "朝陽區", "xx街道xx號");
          }else{
            return new Address("西藏", "拉薩", "xx區", "xx街道xx號");
          }
        }
      },
      {
        provide: Id, useFactory:()=>{
          return Id.getInstance('idcard');
        }
      }
    ]);
    const person = injector.get(Person);
    console.log(JSON.stringify(person));
  }

}

class Id {
  static getInstance(type: string): Id {
    return new Id();
  }
}

class Address {
  provice:string;
  city:string;
  district:string;
  street:string;
  constructor(provice, city, district, street) {
    this.provice=provice;
    this.city=city;
    this.district=district;
    this.street=street;
  }
}

class Person {
  id: Id;
  address: Address;
  constructor(@Inject(Id) id, @Inject(Address )address) {
    this.id = id;
    this.address = address;
  }
}

可以看到控制臺打印出person信息。

Angular中依賴注入的示例分析

簡寫:

      // {
      //   provide: Person, useClass:Person
      // },
      Person, //簡寫為Person

在Angular框架中,框架做了很多事,在provider數組中注冊的東西會自動注冊到池子中。

@NgModule({
  imports: [HttpClientModule, SharedModule, AppRoutingModule, BrowserAnimationsModule],
  declarations: [components],
  exports: [components, AppRoutingModule, BrowserAnimationsModule],
  providers:[
    {provide:'BASE_CONFIG',useValue:'http://localhost:3000'}
  ]
})
  constructor( @Inject('BASE_CONFIG') config) {
    console.log(config);  //控制臺打印出http://localhost:3000
  }

Angular默認都是單例,如果想要每次注入都是一個新的實例。有兩種方法。

一,return的時候return一個方法而不是對象。

{
        provide: Address, useFactory: ()=>{
          return ()=>{
            if(environment.production){
              return new Address("北京", "背景", "朝陽區", "xx街道xx號");
            }else{
              return new Address("西藏", "拉薩", "xx區", "xx街道xx號");
            }
          }
        }
      },

二、利用父子Injector。

constructor(private oc: OverlayContainer) {
    //接收一個provider數組
    const injector = ReflectiveInjector.resolveAndCreate([
      Person,
      {
        provide: Address, useFactory: ()=>{
          if(environment.production){
            return new Address("北京", "背景", "朝陽區", "xx街道xx號");
          }else{
            return new Address("西藏", "拉薩", "xx區", "xx街道xx號");
          }
        }
      },
      {
        provide: Id, useFactory:()=>{
          return Id.getInstance('idcard');
        }
      }
    ]);

    const childInjector = injector.resolveAndCreateChild([Person]);

    const person = injector.get(Person);
    console.log(JSON.stringify(person));
    const personFromChild = childInjector.get(Person);
    console.log(person===personFromChild);  //false
  }

子注入器當中沒有找到依賴的時候會去父注入器中找。

以上是“Angular中依賴注入的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創新互聯行業資訊頻道!

新聞名稱:Angular中依賴注入的示例分析
網頁URL:http://www.hntjjpw.com/article14/joihge.html

成都網站建設公司_創新互聯,為您提供網站維護商城網站移動網站建設定制開發ChatGPT用戶體驗

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都做網站
主站蜘蛛池模板: 墨玉县| 祁阳县| 当阳市| 彰武县| 丹江口市| 夏邑县| 两当县| 二连浩特市| 仁化县| 延川县| 固始县| 井冈山市| 延庆县| 黎城县| 阜宁县| 德保县| 盐池县| 华亭县| 房山区| 门源| 涞源县| 青铜峡市| 上林县| 昌邑市| 洞头县| 五台县| 仲巴县| 防城港市| 许昌县| 镇江市| 澄城县| 凭祥市| 武冈市| 桐庐县| 澜沧| 双流县| 金华市| 屏东市| 理塘县| 洞头县| 惠州市|