Inhaltsverzeichnis
总结
Heim Web-Frontend js-Tutorial Was ist Abhängigkeitsinjektion? Wie implementiert man es in Angular?

Was ist Abhängigkeitsinjektion? Wie implementiert man es in Angular?

Feb 02, 2022 am 09:00 AM
angular di 依赖注入

In diesem Artikel erfahren Sie mehr über die Abhängigkeitsinjektion, stellen die durch die Abhängigkeitsinjektion gelösten Probleme und ihre native Schreibmethode vor und sprechen über das Abhängigkeitsinjektions-Framework von Angular. Ich hoffe, dass es für alle hilfreich ist!

Was ist Abhängigkeitsinjektion? Wie implementiert man es in Angular?

In letzter Zeit bin ich in Angular-Projekten oft auf die Keyword-Abhängigkeitsinjektion gestoßen, aber ich verstehe immer noch nicht, wie sie implementiert wird. Auf der offiziellen Website von Angular wird nur über ihre Verwendung gesprochen und die detaillierten Prinzipien werden nicht erklärt. Beginnen wir also mit der nativen Schreibmethode, um zu erklären, welche Probleme mit der Abhängigkeitsinjektion gelöst werden und wie sie mit js ausgedrückt werden sollte. [Verwandte Tutorial-Empfehlungen: „Angular-Tutorial“]

Was ist Abhängigkeitsinjektion, auch als DI bezeichnet, ist ein Entwurfsprinzip in der objektorientierten Programmierung, das verwendet wird, um die Kopplung zwischen Codes zu reduzieren.

Schauen wir uns zuerst einen Code an

rrree

Angenommen, wir verwenden eine Videoklasse, die über eine Methode getScreenshot verfügt, um Screenshots zu erhalten. Beim Instanziieren der Videoklasse müssen wir einen Parameter wie eine Video-URL übergeben. Jetzt gibt es eine Notizklasse, die die Screenshot-Methode unter der Videoklasse aufrufen muss. Dann können wir sagen, dass die Notizklasse von der Videoklasse abhängt. Innerhalb der Notizklasse müssen wir also die Videoklasse instanziieren, damit wir das Instanzobjekt der Videoklasse in der Notizklasse abrufen und darin die Screenshot-Methode aufrufen können.

Die Kopplung des oben genannten Codes ist zu hoch und wird nicht empfohlen. Wenn beispielsweise die Videoadresse von Video geändert wird, muss die eingehende Video-URL geändert werden. Dies setzt voraus, dass weitere Klassen davon abhängen on Bei Videos muss, sobald Änderungen vorgenommen wurden, alles entsprechend geändert werden, was sehr unpraktisch ist.

Als nächstes verwenden wir die Abhängigkeitsinjektion, um das obige Problem zu lösen:

class Video{
    constructor(url){}
}

class Note{
    video: Video
    constructor(){
        this.video = new Video("https://aaaaa.mp4")
    }
    
    getScreenshot(){
        this.video.getScreenshot()
    }
}

const note = new Note()
note.getScreenshot()
Nach dem Login kopieren

Wir instanziieren die Videoklasse außerhalb der Klasse und übergeben die Instanz durch Parameterübergabe an die Notizklasse. Auf diese Weise kann auch der Kopplungsgrad erfolgreich gelöst werden Da es sich um ein großes Problem handelt, nennen wir diese Art, Instanzen durch Parameter zu übergeben: Injektion.

Vorteile

Durch die Abhängigkeitsinjektion wird die Kopplung zwischen Codes verringert und die Wartbarkeit des Codes erhöht. Codeänderungen in der Videoklasse haben keine Auswirkungen auf die Notizklasse.

Angulars DI-Framework

Im obigen Implementierungsprozess gibt es noch eine Sache, die nicht besonders ideal ist: Wir müssen die Videoklasse außerhalb der Klasse instanziieren. Obwohl dies der einzige Ort ist, hoffen wir immer noch, dass dies der Fall ist Videoklasse Unabhängig davon, wie Sie sie intern ändern, hat dies keine Auswirkungen auf den externen Code.

Im von Angular bereitgestellten DI-Framework müssen wir die Videoklasse nicht selbst instanziieren. Es verbirgt den Prozess der Abhängigkeitsinjektion. Für Entwickler müssen nur sehr einfache Abhängigkeitsinjektionsfunktionen verwendet werden.

Es gibt vier Kernkonzepte in Angulars DI:

Abhängigkeit: das Instanzobjekt, von dem die Komponente abhängt, das Dienstinstanzobjekt
  • Token: Ruft die Identität des Dienstinstanzobjekts ab. Angular verwaltet viele Instanzen Objekte Wenn wir es erhalten müssen, müssen wir es durch Identifizierung erhalten
  • Injektor: Injektor, verantwortlich für die Erstellung und Verwaltung von Instanzobjekten von Serviceklassen, das Einfügen von Serviceinstanzobjekten in Komponenten und deren Weitergabe an jede Komponente Parameter
  • Procider: Objekt, das zum Konfigurieren des Injektors verwendet wird, die Dienstklasse angibt, um das Dienstinstanzobjekt zu erstellen und die Kennung des Instanzobjekts abzurufen
  • Injektor-Injektor
Wir erstellen zunächst einen Injektor über die grundlegende Syntax Bereitgestellt von Angular

ReflectiveInjector wird verwendet, um ein Array zu erstellen Injektor. 2. Holen Sie sich das Serviceklassen-Instanzobjekt im Injektor

class Note{
    video: Video
    constructor(video: Video){
        this.video = Video;
    }
}

const video = new Video("https://aaaaa.mp4")
const note = new Note(video)
Nach dem Login kopieren

Unter dem Injektor gibt es eine Get-Methode, mit der der Bezeichner übergeben und das Instanzobjekt abgerufen wird. Der Standardbezeichner ist der Name der Serviceklasse Video

damit wir das Instanzobjekt von Video erhalten können. Das von Angular bereitgestellte DI-Framework ermöglicht es uns, eine Klasse nicht manuell zu instanziieren, um ihr Instanzobjekt zu erhalten.

2. Das Instanzobjekt des Dienstes befindet sich im Singleton-Modus. Wenn der Injektor die Dienstinstanz erstellt, bereut er das Zwischenspeichern. Das heißt, egal wie oft das Instanzobjekt über das Framework abgerufen wird Gibt das gleiche Instanzobjekt zurück

3. Wir können jedoch mehrere Injektoren erstellen, die von verschiedenen Injektoren zurückgegeben werden. Es gibt eine Methode zum Erstellen eines untergeordneten Injektors Diese Methode erstellt einen untergeordneten Injektor. Die Beziehung zwischen dem übergeordneten Injektor und dem untergeordneten Injektor ähnelt der Gültigkeitskette von js. wie zum Beispiel:

const injector = ReflectiveInjector.resolveAndCreate([ Video ])
const injectorChild = injector.resolveAndCreateChild([])

const video1 = injector.get(Video)
const video2 = injectorChild.get(Video)

console.log(video1 === video1)//true
Nach dem Login kopieren

像上面这段代码,我们在创建子级注入器的时候,不传递参数,但是在子级注入器实例化的时候,由于自身不存在 Video 这个服务,它就会去父级查找,当然,就找到了父级的 Video 这个服务并且实例化,所以后面的两个实例化对象相等

总结

本文介绍了依赖注入解决的问题和它原生的写法是什么用的,并且介绍了Angular提供给我们的DI框架,用它提供给我们的简单api实现了实例化的过程,并且讲解了注入器,也是会分层级的,能提供给我们更好地一个项目设计方式。之后有机会再来讲解一下provider以及更多的扩展。

更多编程相关知识,请访问:编程视频!!

Das obige ist der detaillierte Inhalt vonWas ist Abhängigkeitsinjektion? Wie implementiert man es in Angular?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1666
14
PHP-Tutorial
1273
29
C#-Tutorial
1252
24
So installieren Sie Angular unter Ubuntu 24.04 So installieren Sie Angular unter Ubuntu 24.04 Mar 23, 2024 pm 12:20 PM

Angular.js ist eine frei zugängliche JavaScript-Plattform zum Erstellen dynamischer Anwendungen. Es ermöglicht Ihnen, verschiedene Aspekte Ihrer Anwendung schnell und klar auszudrücken, indem Sie die Syntax von HTML als Vorlagensprache erweitern. Angular.js bietet eine Reihe von Tools, die Sie beim Schreiben, Aktualisieren und Testen Ihres Codes unterstützen. Darüber hinaus bietet es viele Funktionen wie Routing und Formularverwaltung. In dieser Anleitung wird erläutert, wie Angular auf Ubuntu24 installiert wird. Zuerst müssen Sie Node.js installieren. Node.js ist eine JavaScript-Ausführungsumgebung, die auf der ChromeV8-Engine basiert und es Ihnen ermöglicht, JavaScript-Code auf der Serverseite auszuführen. In Ub sein

Eine kurze Analyse der Verwendung des Monaco-Editors in Angular Eine kurze Analyse der Verwendung des Monaco-Editors in Angular Oct 17, 2022 pm 08:04 PM

Wie verwende ich den Monaco-Editor in Angular? Der folgende Artikel dokumentiert die Verwendung des Monaco-Editors in Angular, der kürzlich in einem Unternehmen verwendet wurde. Ich hoffe, dass er für alle hilfreich sein wird!

Ein Artikel über serverseitiges Rendering (SSR) in Angular Ein Artikel über serverseitiges Rendering (SSR) in Angular Dec 27, 2022 pm 07:24 PM

Kennen Sie Angular Universal? Es kann dazu beitragen, dass die Website eine bessere SEO-Unterstützung bietet!

Wie man PHP und Angular für die Frontend-Entwicklung verwendet Wie man PHP und Angular für die Frontend-Entwicklung verwendet May 11, 2023 pm 04:04 PM

Mit der rasanten Entwicklung des Internets wird auch die Front-End-Entwicklungstechnologie ständig verbessert und iteriert. PHP und Angular sind zwei Technologien, die in der Frontend-Entwicklung weit verbreitet sind. PHP ist eine serverseitige Skriptsprache, die Aufgaben wie die Verarbeitung von Formularen, die Generierung dynamischer Seiten und die Verwaltung von Zugriffsberechtigungen übernehmen kann. Angular ist ein JavaScript-Framework, mit dem Single-Page-Anwendungen entwickelt und komponentenbasierte Webanwendungen erstellt werden können. In diesem Artikel erfahren Sie, wie Sie PHP und Angular für die Frontend-Entwicklung verwenden und wie Sie diese kombinieren

Tokenbasierte Authentifizierung mit Angular und Node Tokenbasierte Authentifizierung mit Angular und Node Sep 01, 2023 pm 02:01 PM

Die Authentifizierung ist einer der wichtigsten Teile jeder Webanwendung. In diesem Tutorial werden tokenbasierte Authentifizierungssysteme und ihre Unterschiede zu herkömmlichen Anmeldesystemen erläutert. Am Ende dieses Tutorials sehen Sie eine voll funktionsfähige Demo, die in Angular und Node.js geschrieben wurde. Traditionelle Authentifizierungssysteme Bevor wir zu tokenbasierten Authentifizierungssystemen übergehen, werfen wir einen Blick auf traditionelle Authentifizierungssysteme. Der Benutzer gibt seinen Benutzernamen und sein Passwort im Anmeldeformular ein und klickt auf „Anmelden“. Nachdem Sie die Anfrage gestellt haben, authentifizieren Sie den Benutzer im Backend, indem Sie die Datenbank abfragen. Wenn die Anfrage gültig ist, wird eine Sitzung mit den aus der Datenbank erhaltenen Benutzerinformationen erstellt und die Sitzungsinformationen werden im Antwortheader zurückgegeben, sodass die Sitzungs-ID im Browser gespeichert wird. Bietet Zugriff auf Anwendungen, die unterliegen

Eine kurze Analyse unabhängiger Komponenten in Angular und deren Verwendung Eine kurze Analyse unabhängiger Komponenten in Angular und deren Verwendung Jun 23, 2022 pm 03:49 PM

Dieser Artikel führt Sie durch die unabhängigen Komponenten in Angular, wie Sie eine unabhängige Komponente in Angular erstellen und wie Sie vorhandene Module in die unabhängige Komponente importieren. Ich hoffe, er wird Ihnen hilfreich sein!

Was soll ich tun, wenn das Projekt zu groß ist? Wie teilt man Angular-Projekte sinnvoll auf? Was soll ich tun, wenn das Projekt zu groß ist? Wie teilt man Angular-Projekte sinnvoll auf? Jul 26, 2022 pm 07:18 PM

Das Angular-Projekt ist zu groß. Wie kann man es sinnvoll aufteilen? Der folgende Artikel zeigt Ihnen, wie Sie Angular-Projekte sinnvoll aufteilen. Ich hoffe, er ist hilfreich für Sie!

Winkelkomponenten und ihre Anzeigeeigenschaften: Nicht-Block-Standardwerte verstehen Winkelkomponenten und ihre Anzeigeeigenschaften: Nicht-Block-Standardwerte verstehen Mar 15, 2024 pm 04:51 PM

Das Standardanzeigeverhalten für Komponenten im Angular-Framework gilt nicht für Elemente auf Blockebene. Diese Designwahl fördert die Kapselung von Komponentenstilen und ermutigt Entwickler, bewusst zu definieren, wie jede Komponente angezeigt wird. Durch explizites Festlegen der CSS-Eigenschaft display kann die Anzeige von Angular-Komponenten vollständig gesteuert werden, um das gewünschte Layout und die gewünschte Reaktionsfähigkeit zu erreichen.

See all articles