1
00:00:00,000 --> 00:00:05,106
[MUSICA]

2
00:00:05,106 --> 00:00:08,592
Ora diamo un'occhiata penetrante all'iniezione di dipendenza.

3
00:00:08,592 --> 00:00:13,874
Cos' è esattamente l'iniezione di dipendenza e in che modo è rilevante per Angular?

4
00:00:13,874 --> 00:00:17,180
Parliamone dopo.

5
00:00:17,180 --> 00:00:20,260
Quindi, cos'è esattamente l'iniezione di dipendenza?

6
00:00:20,260 --> 00:00:24,600
L' iniezione di dipendenza è un modello di progettazione software.

7
00:00:24,600 --> 00:00:28,890
Questo è un modello utile per l'implementazione di applicazioni in cui

8
00:00:28,890 --> 00:00:35,940
si dispone di un oggetto che dipende da un altro oggetto in modo efficiente.

9
00:00:35,940 --> 00:00:40,850
Ora l'iniezione di dipendenza, come ci rendiamo conto, ha due parti.

10
00:00:40,850 --> 00:00:43,280
Dipendenza e iniezione.

11
00:00:43,280 --> 00:00:45,760
Parliamo prima della dipendenza.

12
00:00:45,760 --> 00:00:50,750
Dipendenza significa che il tuo oggetto dipende da un altro oggetto.

13
00:00:50,750 --> 00:00:55,400
Quindi, questo è il motivo per cui questa è una dipendenza tra il tuo oggetto e un altro oggetto.

14
00:00:56,500 --> 00:01:02,480
L' iniezione sta parlando di passare la dipendenza a un oggetto dipendente.

15
00:01:02,480 --> 00:01:06,570
Quindi, se hai un oggetto, se c'è un meccanismo che

16
00:01:06,570 --> 00:01:11,410
ti permette di essere in grado di prendere un oggetto e quindi renderlo disponibile per un secondo oggetto, in modo

17
00:01:11,410 --> 00:01:15,360
che l'altro oggetto possa utilizzarlo senza essere consapevole

18
00:01:15,360 --> 00:01:19,590
esattamente di come il primo oggetto viene implementato o cancellato.

19
00:01:19,590 --> 00:01:24,950
Quindi, in questo caso l'oggetto che è dipendente non è a conoscenza

20
00:01:24,950 --> 00:01:29,050
o non ha bisogno di preoccuparsi di come viene implementato l'altro oggetto.

21
00:01:29,050 --> 00:01:34,250
Ha solo bisogno di farne uso, all'interno del tuo oggetto, ovunque si trovi.

22
00:01:35,490 --> 00:01:41,090
Dependency Injection è stata coniata da Martin Fowler nel 2004.

23
00:01:41,090 --> 00:01:47,520
Ed è un utile design software che sottolinea ulteriormente la dipendenza.

24
00:01:48,670 --> 00:01:52,070
Se un oggetto dipende da un altro oggetto,

25
00:01:52,070 --> 00:01:56,035
ci sono tre modi in cui può accedere all'altro oggetto.

26
00:01:56,035 --> 00:02:01,420
1, Può creare l'oggetto dipendente stesso utilizzando il nuovo operatore

27
00:02:01,420 --> 00:02:03,650
che hai visto questo nel caso delle classi.

28
00:02:03,650 --> 00:02:08,280
Quindi, ad esempio, se hai bisogno di un nuovo oggetto di un tipo di classe,

29
00:02:08,280 --> 00:02:14,592
allora crei quell'oggetto usando il nuovo all'interno dei linguaggi, come C ++ o

30
00:02:14,592 --> 00:02:20,830
Java, e persino scrivi script.

31
00:02:20,830 --> 00:02:26,850
Quindi, puoi fare uso di quel particolare oggetto.

32
00:02:26,850 --> 00:02:30,950
L' altro modo è dichiarare l'altro oggetto come variabile globale e

33
00:02:30,950 --> 00:02:34,780
quindi si cerca la dipendenza utilizzando la variabile globale.

34
00:02:34,780 --> 00:02:39,970
Il terzo modo per farlo è avere la dipendenza passata in te,

35
00:02:39,970 --> 00:02:41,730
ovunque sia necessaria.

36
00:02:41,730 --> 00:02:45,690
Quindi, se sei dipendente da qualcos'altro, allora qualcos'altro

37
00:02:45,690 --> 00:02:50,130
ti verrà iniettato da un sistema ovunque sia richiesto.

38
00:02:50,130 --> 00:02:54,680
Quindi, ora la terza opzione ti dà molta flessibilità nel modo in

39
00:02:54,680 --> 00:02:57,610
cui il software è progettato.

40
00:02:57,610 --> 00:03:00,440
Quindi in questo approccio, nel terzo approccio,

41
00:03:00,440 --> 00:03:05,560
non c'è bisogno di una codifica rigida dopo la dipendenza.

42
00:03:05,560 --> 00:03:10,470
Nei primi due approcci, la dipendenza è codificata in là,

43
00:03:10,470 --> 00:03:13,470
perché è necessario essere pienamente consapevoli di come si crea

44
00:03:13,470 --> 00:03:18,180
l'oggetto da cui si dipende, all'interno del proprio oggetto.

45
00:03:18,180 --> 00:03:19,577
Nel terzo oggetto,

46
00:03:19,577 --> 00:03:24,389
poiché l'altro oggetto viene iniettato in te ogni volta che ne

47
00:03:24,389 --> 00:03:29,220
hai bisogno, non ti interessa davvero come viene creato, purché tu abbia accesso ad esso.

48
00:03:29,220 --> 00:03:34,125
E l'altro vantaggio che questo approccio comporta è che

49
00:03:34,125 --> 00:03:38,855
facilita la facilità di testare la tua applicazione perché quando hai

50
00:03:38,855 --> 00:03:43,760
bisogno di un oggetto da cui sei dipendente, invece di passare

51
00:03:43,760 --> 00:03:49,020
l'oggetto dipendente potresti persino creare un oggetto finto del tipo e

52
00:03:49,020 --> 00:03:53,850
quindi passarlo in per testare il tuo oggetto specifico.

53
00:03:53,850 --> 00:03:57,530
Questa separazione tra l'oggetto dipendente e l'altro oggetto è molto,

54
00:03:57,530 --> 00:04:02,250
molto utile come ci rendiamo conto nello svolgimento dei test.

55
00:04:02,250 --> 00:04:08,886
Ne discuteremo brevemente quando esamineremo i test angolari più avanti in questo corso.

56
00:04:08,886 --> 00:04:15,850
Dependency Injection porta circa quattro diversi ruoli che dobbiamo considerare.

57
00:04:15,850 --> 00:04:20,770
Innanzitutto è il servizio che userai all'interno del

58
00:04:22,460 --> 00:04:27,160
tuo componente per esempio e che deve essere iniettato.

59
00:04:27,160 --> 00:04:30,270
Secondo il client che dipende dal servizio

60
00:04:30,270 --> 00:04:33,380
che in questo caso è il tuo componente.

61
00:04:33,380 --> 00:04:39,470
In terzo luogo, l'interfaccia, una volta iniettata come si fa a fare uso di quel servizio.

62
00:04:39,470 --> 00:04:43,420
E infine l'iniettore, l'entità che è responsabile dell'

63
00:04:43,420 --> 00:04:47,230
iniezione di quell'oggetto nel tuo oggetto.

64
00:04:48,620 --> 00:04:50,730
Come ti renderai conto molto presto, l'

65
00:04:50,730 --> 00:04:56,540
iniezione di dipendenza espressa angolare molto nel modo in cui è implementata.

66
00:04:56,540 --> 00:05:01,090
Quindi questo è ciò che facilita la separazione di una logica aziendale

67
00:05:01,090 --> 00:05:05,040
dalla costruzione delle dipendenze in modo da poter scrivere

68
00:05:05,040 --> 00:05:09,660
la logica aziendale nell'oggetto indipendente e quindi iniettarle ovunque sia richiesta.

69
00:05:09,660 --> 00:05:13,590
E la dipendenza è passata nell'oggetto che lo sta consumando

70
00:05:13,590 --> 00:05:15,130
ovunque sia necessario.

71
00:05:15,130 --> 00:05:19,760
Ora, come si prende cura di questa iniezione?

72
00:05:19,760 --> 00:05:24,380
Questa iniezione è curata dal sottosistema di iniezione angolare.

73
00:05:24,380 --> 00:05:30,250
Il sottosistema di iniezione angolare si occupa della creazione di questi servizi e

74
00:05:30,250 --> 00:05:35,120
quindi li inietta nel componente ovunque ne abbiate bisogno.

75
00:05:35,120 --> 00:05:38,540
Quindi si prende anche cura di risolvere le dipendenze e anche,

76
00:05:38,540 --> 00:05:45,030
fornendo quegli oggetti ad altri componenti che richiedono questi oggetti.

77
00:05:45,030 --> 00:05:49,180
Quindi il sottosistema di iniettori angolari fornisce tutti questi meccanismi

78
00:05:49,180 --> 00:05:50,770
per consentire questo.

79
00:05:50,770 --> 00:05:52,450
Come funziona davvero?

80
00:05:52,450 --> 00:05:57,101
Lo vedremo nell'esercizio che segue,

81
00:05:57,101 --> 00:06:02,527
dove useremo un servizio che creeremo nei componenti

82
00:06:02,527 --> 00:06:06,977
che abbiamo progettato per la nostra applicazione angolare.

83
00:06:06,977 --> 00:06:12,169
[ MUSIC]