Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Dependency injectionΒΆ

ВсС сСрвисы Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Injector-ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° DI Π² Angular. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько injector-ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Когда ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ трСбуСтся сСрвис, Ρ‚ΠΎ Π΅Π³ΠΎ поиск начинаСтся с самого Π½ΠΈΠΆΠ½Π΅Π³ΠΎ injector-Π° ΠΈ Π΄Π°Π»Π΅Π΅ Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ сначала провСряСтся ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ самого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

Если сСрвис Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½ΠΈΠΆΠ½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ, Ρ‚ΠΎ дальнСйший поиск Π½Π΅ осущСствляСтся. Если ΠΆΠ΅ поиск Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ даст Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирована ошибка.

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ @SkipSelf() ΠΈ @Optional()ΒΆ

НСмного Π²Ρ‹ΡˆΠ΅ ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈΡΡŒ Π΄Π²Π° нюанса, связанных с Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Angular Dependency Injection. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΈΠ· Π½ΠΈΡ… это ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ поиска, Ссли Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ сСрвис ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Но Ρ‡Ρ‚ΠΎ Ссли Π²Π°ΠΌ понадобится, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΈΠ· этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΊ Π΄Π²ΡƒΠΌ сСрвисам ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ: Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠΌΡƒ?

Angular ProvidersΒΆ

Π‘Π°ΠΌΡ‹ΠΉ простой способ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСрвис Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Π’Π°ΠΊΠΆΠ΅ Π² качСствС элСмСнта массива свойства Angular providers ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сСрвиса.

ПослСдниС Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ позволяСт ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ injection token.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:

Π’ deps ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ всС зависимости, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для создания factory provider.

ВсС значСния, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π² свойствС provide Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ Π±Ρ‹Ρ‚ΡŒ классами, ΠΈΠ½Π°Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ нСизвСстно, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π° injection token.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΡƒΡŽΡΡ сСрвисом Angular, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ для Π½Π΅Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ injection token.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ DI Π² Angular ΠΏΠΎ максимуму β€” концСпция частных ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Π’ Angular ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Dependency Injection. Он позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΡ… Π² Π½ΡƒΠΆΠ½Ρ‹Ρ… частях.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ простой ΠΈ Π³ΠΈΠ±ΠΊΠΎΠΉ: понятный ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…, минимальная ΡΠ²ΡΠ·Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ тСстировании ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅ зависимостСй.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ DI Π² прилоТСниях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ достаточно скромно. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ сСрвисов ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… свСрху Π²Π½ΠΈΠ· ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ внСдрСния зависимостСй.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· DI Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. ЦСль: ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΈ сСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ DI Π² Angular

Π― Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠΆΡƒ Ρ€Π΅Π²ΡŒΡŽ Angular-ΠΊΠΎΠ΄Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈ Π² опСнсорсС. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ DI сводится ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

Angular прСдоставляСт Ρ‚ΠΎΠΊΠ΅Π½ DOCUMENT, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ страницы ΠΈΠ· любого мСста прилоТСния: ваши ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π΅ зависят ΠΎΡ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π»Π΅Π³ΠΊΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ сломаСтся ΠΏΡ€ΠΈ SSR.

Если Π²Π°ΠΌ рСгулярно Π½ΡƒΠΆΠ΅Π½ доступ Π΄ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° WINDOW, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΎΠΊΠ΅Π½:

Когда ΠΊΡ‚ΠΎ-Ρ‚ΠΎ запросит Ρ‚ΠΎΠΊΠ΅Π½ WINDOW Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· ΠΈΠ· Π΄Π΅Ρ€Π΅Π²Π° DI, выполнится Ρ„Π°Π±Ρ€ΠΈΠΊΠ° Ρ‚ΠΎΠΊΠ΅Π½Π° β€” ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ DOCUMENT Ρƒ Angular ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΈΠ· Π½Π΅Π³ΠΎ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ window.

Π”Π°Π»Π΅Π΅ я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ‚Π°ΠΊΠΈΠΌ прСобразованиям β€” ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ нСпосрСдствСнно Π² providers ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ЧастныС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹

Π’ нашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΌΡ‹ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ DI ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Angular ΠΈ стали Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ прСобразования ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· DI Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм. ЀактичСски наш ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ нуТдаСтся Π² ΠΎΠ΄Π½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, Π° ΠΌΡ‹ внСдряСм Π² Π½Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈ выполняСм Π»ΠΎΠ³ΠΈΠΊΡƒ прСобразования Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим сразу Π½Π° солидном ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π­Ρ€ΠΈΠ½ ΠšΠΎΠ³Π»Π°Ρ€ Π² своСм Π΄ΠΎΠΊΠ»Π°Π΄Π΅ The Architecture of Components Π½Π° большой ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Angular Connect ΠΏΠΎΠΊΠ°Π·Π°Π»Π° Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Если Π²Π°ΠΌ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ, Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°ΡΠΏΠΈΡˆΡƒ кСйс здСсь.

Π’Π·ΡΡ‚ΡŒ ΠΈΠ· query-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² id ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ сСрвиса, Π° Π² ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ стрим с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ вывСсти Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅.

Рассмотрим Ρ‚Ρ€ΠΈ способа Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΈΡ….

Как Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ

Иногда я Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π½Π΅ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² шаблонС:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ряд ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

Π’ Π΄ΠΎΠΊΠ»Π°Π΄Π΅ Π­Ρ€ΠΈΠ½ ΠΈΠ· Π²ΠΈΠ΄Π΅ΠΎ, Ρ‡Ρ‚ΠΎ я ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°Π» Π²Ρ‹ΡˆΠ΅, сдСлано Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π‘ Π΅Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ получаСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² шаблонС:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ лишСн нСдостатков ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°: смотрится достаточно Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ, Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ Π»ΠΈΡˆΠ½ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ. Если ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ стримом, ΠΌΡ‹ просто Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΡ€ΠΎΡ‰Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ для добавлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ стрима Π½Π°ΠΌ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… становится Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ: Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стрим, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания класса ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Когда ΠΎΠ½ выдаст Π΄Π°Π½Π½Ρ‹Π΅, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° информация Π² нашСм шаблонС.

Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π΅Ρ‰Π΅ ΠΊΡ€ΡƒΡ‡Π΅: частныС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹

Π”Π°Π²Π°ΠΉΡ‚Π΅ присмотримся Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΊ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌΡƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ.

На самом Π΄Π΅Π»Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ зависит ΠΎΡ‚ Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π° ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΡ‚ OrganizationService. Он зависит ΠΎΡ‚ organization$. Но Ρ‚Π°ΠΊΠΎΠΉ сущности Π² нашСм Π΄Π΅Ρ€Π΅Π²Π΅ внСдрСния зависимостСй Π½Π΅Ρ‚, поэтому ΠΌΡ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ прСобразования Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅.

Но Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ это ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚? Π”Π°Π²Π°ΠΉΡ‚Π΅ напишСм Provider ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ прСобразования.

Для удобства ΠΌΡ‹ выносим ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» рядом с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ, получая Ρ‚Π°ΠΊΡƒΡŽ структуру Ρ„Π°ΠΉΠ»ΠΎΠ²:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Π’ Ρ„Π°ΠΉΠ»Π΅ organization.providers.ts Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Provider для прСобразования Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ для ΠΈΡ… получСния Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅:

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ массив ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Ρ‚ΠΎΠΊΠ΅Π½Π° ORGANIZATION_INFO ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΈΠ· Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ сдСлаСм Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ DI β€” deps позволяСт Π²Π·ΡΡ‚ΡŒ ΠΈΠ· Π΄Π΅Ρ€Π΅Π²Π° DI Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ сущности ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ значСния Ρ‚ΠΎΠΊΠ΅Π½Π°. Π’ Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΈΠ· DI, Π² Ρ‚ΠΎΠΌ числС ΠΈ с использованиСм DI-Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Объявим providers Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅:

И ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ использованию Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅:

Класс ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° сводится ΠΊ ΠΎΠ΄Π½ΠΎΠΉ строчкС с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

Π¨Π°Π±Π»ΠΎΠ½ остаСтся ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ:

Π§Ρ‚ΠΎ Π½Π°ΠΌ Π΄Π°Π΅Ρ‚ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄?

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠžΠΏΠΈΡΠ°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ вас ΠΎΡ‚ всСх ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ проСктирования. Π”ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ Π½Π° Π»ΡŽΠ±ΡƒΡŽ ΠΌΠ΅Π»ΠΎΡ‡ΡŒ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ стоит: ΠΈΠ½ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ получаСтся понятнСС, Ссли Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Pipe.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ я надСюсь, Ρ‡Ρ‚ΠΎ частныС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с большим количСством зависимостСй ΠΈΠ»ΠΈ Π΄Π°Π΄ΡƒΡ‚ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρƒ ΠΏΡ€ΠΈ постСпСнном Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… кусков Π»ΠΎΠ³ΠΈΠΊΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ВозмоТности Angular DI, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ сказано Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Angular β€” это достаточно большой Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ. Π—Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ кСйса просто Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. И ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ внСдрСния зависимостСй Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу ΠΎ возмоТностях Angular DI, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π§Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ inject?

ДокумСнтация Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Injects a token from the currently active injector. Must be used in the context of a factory function such as one defined for an InjectionToken. Throws an error if not called from such a context.

И дальшС ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ inject Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с tree shakable Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ:

Π­Ρ‚ΠΎ всС, Ρ‡Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ докумСнтация.

Π’ Ρ„Π°Π±Ρ€ΠΈΠΊΠ°Ρ… tree shakable ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ².

Π’ Ρ„Π°Π±Ρ€ΠΈΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ².

Π’ конструкторах сСрвисов.

Π’ конструкторах ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Π’Π°ΠΊ ΠΊΠ°ΠΊ фабричная функция InjectionToken Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, inject β€” СдинствСнный способ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Π°. Но Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ эта функция Π² сСрвисах, Ссли ΠΌΠΎΠΆΠ½ΠΎ просто ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости прямо Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… конструктора?

Рассмотрим нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Ручная установка контСкста для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ inject

Если Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ inject становится ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠΉ:

Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setCurrentInjector присваиваСт Π² ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ _currentInjector ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€, возвращая ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ;

функция inject достаСт ΠΈΠ· _currentInjector Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΎΠΊΠ΅Π½Ρƒ.

Π­Ρ‚ΠΎ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ просто, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ спокойно ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ inject Π΄Π°ΠΆΠ΅ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ…:

ΠŸΡ€Π°Π²Π΄Π°, выглядит это ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ нСюзабСльно. Π”Π° ΠΈ использованиС ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Angular Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Injection flags

InjectFlags β€” это Π°Π½Π°Π»ΠΎΠ³ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Optional, Self, SkipSelf ΠΈ Host. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² функциях inject ΠΈ Injector.get. ДокумСнтация ΠΈ здСсь Π½Π΅ ΠΏΠΎΠ΄Π²Π΅Π»Π° β€” Π΅Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅Ρ‚:

Π§Π΅Π»ΠΎΠ²Π΅ΠΊ Π·Π½Π°ΡŽΡ‰ΠΈΠΉ сразу ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ здСсь Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ маски. Π­Ρ‚ΠΎΡ‚ ΠΆΠ΅ enum ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π²ΠΈΠ΄Π΅:

ИспользованиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π»Π°Π³Π°

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ событий Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π°, Π½Π΅ бСспокоясь ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³Π° Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½:

Выглядит просто. А Π½Π° Π΄Π΅Π»Π΅ β€” Π΅Ρ‰Π΅ ΠΈ бСзопасно, Π±Π΅Π· Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ ΠΈ Π»ΠΈΡˆΠ½ΠΈΡ… событий.

ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ Ρ„Π»Π°Π³ΠΎΠ²

ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ Ρ„Π»Π°Π³ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ импортировался ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. А ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π˜Π›Π˜:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π° получаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ И:

Tree shakable сСрвисы ΠΈ *SansProviders

Tree shakable сСрвисы β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ компилятору, Ρ‡Ρ‚ΠΎ сСрвис Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сборку, Ссли ΠΎΠ½ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. ΠŸΡ€ΠΈ этом сСрвис Π½Π΅ указываСтся Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅, скорСС Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ β€” ΠΌΠΎΠ΄ΡƒΠ»ΡŒ указываСтся Π² сСрвисС:

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π² ΠΏΡ€ΠΎΠΏΠ΅Ρ€Ρ‚ΠΈ providedIn ΡƒΠΊΠ°Π·Π°Π½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ, ΠΏΠΎ ΠΌΠΎΠ΅ΠΌΡƒ мнСнию, способ использования Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π² tree shakable сСрвисах выглядит Ρ‚Π°ΠΊ:

ΠŸΠ»ΡŽΡΡ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ опрСдСлСния сСрвиса:

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ случайноС использованиС сСрвиса. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ сСрвиса.

Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ созданиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ экзСмпляра сСрвиса.

Π‘ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ способами опрСдСлСния Π½Π΅ всС Ρ‚Π°ΠΊ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ. Π― ΠΌΠΎΠ³Ρƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈ использовании Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅Ρ‰Π΅ ΠΈ отсутствуСт типизация.

Для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² я ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ use-кСйсы Π²Π°ΠΌ самим. Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄, Ссли Π²Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ ΠΈΠΌΠΈ Π² коммСнтариях.

ВзаимодСйствиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ пСрСчислСны всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ способы взаимодСйствия ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ собой:

Input binding with a setter, ngOnChanges.

Child events (outputs).

Но Π½ΠΈ слова Π½Π΅ сказано ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ дочСрняя Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°/ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ спокойно ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ инстанс родитСля Ρ‡Π΅Ρ€Π΅Π· DI.

UPD: нашлась всС Ρ‚Π°ΠΊΠΈ ссылочка Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, Π³Π΄Π΅ описываСтся этот способ.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ дочСрняя Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ инстанс ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° родитСля, упрощая ΠΈΡ… взаимодСйствиС. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ ΠΊΠ»ΠΈΠΊ ΠΏΠΎ хостовому элСмСнту, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. ИспользованиС любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ способа Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π±ΠΎΠ»Π΅Π΅ многословным.

Но ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ? ΠžΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ большим, ΠΈ ΠΎΠ½ явно Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ. Когда-Π½ΠΈΠ±ΡƒΠ΄ΡŒ я Π½Π°ΠΏΠΈΡˆΡƒ ΠΎΠ± этом Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. А ΠΏΠΎΠΊΠ° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ± ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ ElementInjector (ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ порядкС).

ВмСсто Π²Ρ‹Π²ΠΎΠ΄Π°

Как я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Angular β€” ΠΎΡ‡Π΅Π½ΡŒ большой Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ. И я ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ Π² Π΅Π³ΠΎ исходниках ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС интСрСсных возмоТностСй.

Π‘Π²ΠΎΠΈΠΌΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΊΠ°ΠΌΠΈ я всСгда дСлюсь Π² своСм Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π΅. НапримСр, совСты ΠΏΠΎ Angular Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ Ρ…ΡΡˆΡ‚Π΅Π³Ρƒ #AngularTip. А ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ самых интСрСсных Ρ‚Π²ΠΈΡ‚ΠΎΠ² β€” ΠΏΠΎ Ρ…ΡΡˆΡ‚Π΅Π³Ρƒ #AngularTipRus! Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄, Ссли Π²Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ своими наблюдСниями ΠΈ совСтами со ΠΌΠ½ΠΎΠΉ ΠΈ сообщСством. Бпасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!

Бписок Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… статСй ΠΎΠ± Angular DI

Π― вспомнил Π΅Ρ‰Π΅ 2 ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎΠ± Angular DI ΠΎΡ‚ @MarsiBarsi Π½Π° русском языкС. ΠŸΠΈΡˆΠΈΡ‚Π΅ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΉΡ‚Π΅ ΠΈ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ ΠΏΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Angular 6+ ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство ΠΏΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡŽ зависимостСй. providedIn vs providers:[]

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Π’ Angular 6 появился Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ синтаксис для внСдрСния зависимостСй сСрвисов Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (provideIn). НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π²Ρ‹ΡˆΠ΅Π» Angular 7, эта Ρ‚Π΅ΠΌΠ° Π΄ΠΎ сих ΠΏΠΎΡ€ остаСтся Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ. БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ Π² коммСнтариях GitHub, Slack ΠΈ Stack Overflow, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ эту Ρ‚Π΅ΠΌΡƒ.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим:

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй (dependency Injection)

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй (DI) β€” это способ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². БистСма внСдрСния зависимостСй прСдоставляСт зависимыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° создаСт экзСмпляр класса.

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ объяснСния Ρ…ΠΎΡ€ΠΎΡˆΠΈ, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй.

ВсС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ сСрвисы ΡΠ²Π»ΡΡŽΡ‚ΡΡ классами. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ constructor, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-экзСмпляр Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉΡΡ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

Допустим Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½Π°ΡˆΠΈΡ… сСрвисов имССтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

Если ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ внСдрСния зависимостСй, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ HttpClient Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Но ΠΎΡ‚ΠΊΡƒΠ΄Π° Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π²Π·ΡΡ‚ΡŒ httpClient? Π•Π³ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ:

Но ΠΎΡ‚ΠΊΡƒΠ΄Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π·ΡΡ‚ΡŒ httpHandler? И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ созданы экзСмпляры всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… классов. Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ€ΡƒΡ‡Π½ΠΎΠ΅ созданиС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТным ΠΈ Π² процСссС ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ошибки.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ внСдрСния зависимостСй Angular Π΄Π΅Π»Π°Π΅Ρ‚ всС это автоматичСски. ВсС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ зависимости Π² конструкторС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΈ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ усилий с нашСй стороны.

Π‘Ρ‚Π°Ρ€Ρ‹ΠΉ способ внСдрСния зависимостСй Π² Angular (providers: [])

Для запуска прилоТСния Angular Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ сСрвисы. Π”ΠΎ Ρ€Π΅Π»ΠΈΠ·Π° Angular 6 СдинствСнным способом ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π±Ρ‹Π»ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ сСрвисов Π² свойствС providers: [] Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² @NgModule, @Π‘omponent ΠΈ @Directive.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ‚Ρ€ΠΈ основных случая использования providers: []:

ΠœΠΎΠ΄ΡƒΠ»ΠΈ, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Π΅ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ (Eager)

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС сСрвис рСгистрируСтся Π² глобальной области видимости ΠΊΠ°ΠΊ синглтон. Он Π±ΡƒΠ΄Π΅Ρ‚ синглтоном Π΄Π°ΠΆΠ΅ Ссли Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² providers[] Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. БоздаСтся СдинствСнный экзСмпляр класса сСрвиса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ зарСгистрирован Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ корня прилоТСния.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ с ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ (Lazy)

ЭкзСмпляр сСрвиса, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊ lazy ΠΌΠΎΠ΄ΡƒΠ»ΡŽ, Π±ΡƒΠ΄Π΅Ρ‚ создан Π²ΠΎ врСмя Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ сСрвиса Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ eager модуля ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС: No provider for MyService! error.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π² @Π‘omponent ΠΈ @Directive

ΠŸΡ€ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ создаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ экзСмпляр сСрвиса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ доступСн Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ΠΈ всСх Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ…. Π’ этой ситуации сСрвис Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ синглтоном, Π΅Π³ΠΎ экзСмпляр Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ использовании ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ вмСстС с ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ· DOM.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Новый способ внСдрСния зависимостСй Π² Angular (providedIn: ‘root’ | SomeModule)

Π’ Angular 6 ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ инструмСнт β€œTree-shakable providers” для внСдрСния зависимостСй Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойства providedIn Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° @Injectable.

МоТно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ providedIn ΠΊΠ°ΠΊ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ: Ρ€Π°Π½ΡŒΡˆΠ΅ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Π»ΠΈΡΡŒ сСрвисы, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² сСрвисС опрСдСляСтся ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ.

БСрвис ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π½Π΅Π΄Ρ€Π΅Π½ Π² ΠΊΠΎΡ€Π΅Π½ΡŒ прилоТСния(providedIn: ‘root’) ΠΈΠ»ΠΈ Π² любой ΠΌΠΎΠ΄ΡƒΠ»ΡŒ (providedIn: SomeModule). providedIn: ‘root’ являСтся сокращСниСм для внСдрСния Π² AppModule.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ основныС сцСнария использования Π½ΠΎΠ²ΠΎΠ³ΠΎ синтаксиса:

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ прилоТСния (providedIn: ‘root’)

Π­Ρ‚ΠΎ самый распространСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ внСдрСния зависимостСй. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС сСрвис Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Π±Π°Π½Π΄Π» ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‚.Π΅. Π²Π½Π΅Π΄Ρ€Π΅Π½ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ сСрвис.

ΠŸΡ€ΠΈ использовании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ особой Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΠΌ SPA ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ всС написанныС сСрвисы, ΠΎΠ΄Π½Π°ΠΊΠΎ providedIn: ‘root’ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΡ€ΠΈ написании Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.

РаньшС всС сСрвисы Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² providers:[] Π΅Ρ‘ модуля. ПослС ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π±Π°Π½Π΄Π» добавлялись всС сСрвисы, Π΄Π°ΠΆΠ΅ Ссли использовался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½. Π’ случаС с providedIn: ‘root’ Π½Π΅Ρ‚ нСобходимости ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Достаточно просто Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ сСрвис Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ с ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ (lazy) ΠΈ providedIn: β€˜root’

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ сСрвис с providedIn: ‘root’ Π² lazy ΠΌΠΎΠ΄ΡƒΠ»ΡŒ?

ВСхничСски ‘root’ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ AppModule, Π½ΠΎ Angular достаточно ΡƒΠΌΠ΅Π½, Ρ‡Ρ‚ΠΎΠ± Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ сСрвис Π² Π±Π°Π½Π΄Π» lazy модуля, Ссли ΠΎΠ½ Π²Π½Π΅Π΄Ρ€Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ сСрвисы. Но Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° (хотя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ люди ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ это Ρ„ΠΈΡ‡Π°). Если ΠΏΠΎΠ·ΠΆΠ΅ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ сСрвис, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² lazy ΠΌΠΎΠ΄ΡƒΠ»Π΅, Π² основной ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ‚ΠΎ сСрвис Π±ΡƒΠ΄Π΅Ρ‚ пСрСнСсСн Π² основной Π±Π°Π½Π΄Π». Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… прилоТСниях с мноТСством ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ сСрвисов это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ с отслСТиваниСм зависимостСй ΠΈ нСпрСдсказуСмому повСдСнию.

Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹! Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвиса Π²ΠΎ мноТСствС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ скрытым зависимостям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ Π΅ΡΡ‚ΡŒ способы ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ это, ΠΈ ΠΌΡ‹ рассмотрим ΠΈΡ… Π½ΠΈΠΆΠ΅.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимости Π² Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ (eager)

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, этот кСйс Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла ΠΈ вмСсто Π½Π΅Π³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ providedIn: ‘root’. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сСрвиса Π² EagerModule ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для инкапсуляции ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ модуля, Π½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Ρ‚Π°ΠΊΠΎΠΉ нСобходимости Π½Π΅Ρ‚.

Если Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ понадобится ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости сСрвиса, ΠΏΡ€ΠΎΡ‰Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ старым способом providers:[], Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ цикличСским зависимостям.

По возмоТности ΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ providedIn: ‘root’ Π²ΠΎ всСх eager модулях.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ с ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ(lazy)

Одной ΠΈΠ· основных Ρ„ΠΈΡ‡ Angular являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прСимущСства:

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ прСимущСством изолированности lazy модуля являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ошибка, допущСнная Π² Π½Π΅ΠΌ, Π½Π΅ повлияСт Π½Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠ°Ρ‚ΡŒ спокойно Π΄Π°ΠΆΠ΅ Π² дСнь Ρ€Π΅Π»ΠΈΠ·Π°.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ(providedIn: LazyModule)

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимости Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ Π΄Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСрвис Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… частях прилоТСния. Π­Ρ‚ΠΎ позволяСт ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ структуру зависимостСй, Ρ‡Ρ‚ΠΎ особо ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… бСспорядочноС Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π΅.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚: Если lazy сСрвис Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния, Ρ‚ΠΎ сборка (Π΄Π°ΠΆΠ΅ AOT) ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ Π±Π΅Π· ошибок, Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠΏΠ°Π΄Π΅Ρ‚ с ошибкой Β«No provider for LazyServiceΒ».

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с цикличСской Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

ВоспроизвСсти ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ, создав ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΡŒ LazyServiceModule, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² LazyModule. К ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сСрвисы.
Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС придСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π½ΠΎ это Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ усилий ΠΈ даст ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ»ΡŽΡΡ‹:

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ сСрвиса Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (providedIn: SomeComponent)

БущСствуСт Π»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ сСрвис Π² @Π‘omponent ΠΈΠ»ΠΈ @Directive с использованиСм Π½ΠΎΠ²ΠΎΠ³ΠΎ синтаксиса?

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅Ρ‚!

Для создания экзСмпляра сСрвиса Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ всС Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ providers: [] Π² Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°Ρ… @Π‘omponent ΠΈΠ»ΠΈ @Directive.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ использованию Π½ΠΎΠ²ΠΎΠ³ΠΎ синтаксиса Π² прилоТСниях

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

providedIn: ‘root’ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для создания Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π­Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² основноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСпосрСдствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ сборки.

Одним ΠΈΠ· практичСских ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² являСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ngx-model, которая Π±Ρ‹Π»Π° пСрСписана с использованиСм Π½ΠΎΠ²ΠΎΠ³ΠΎ синтаксиса ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ называСтся @angular-extensions/model. Π’ Π½ΠΎΠ²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅Ρ‚ нСобходимости ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ NgxModelModule Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, достаточно просто Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ ModelFactory Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΡƒΡ‚.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ с ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ(lazy)

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для сСрвисов ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ providedIn: LazyServicesModule ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² LazyModule. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ инкапсулируСт сСрвисы ΠΈ Π½Π΅ даст ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Π­Ρ‚ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ.

По ΠΌΠΎΠ΅ΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ случайноС Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π² основной ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ (с использованиСм providedIn: ‘root’) ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π΅ ΠΈ являСтся Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ!

providedIn: ‘root’ Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, Π½ΠΎ ΠΏΡ€ΠΈ использовании providedIn: LazyServideModule ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ Β«missing providerΒ» ΠΏΡ€ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ смоТСм ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‚ΠΈ сСрвис Π² Π±ΠΎΠ»Π΅Π΅ подходящСС мСсто Π² основной части прилоТСния.

Π’ случаях, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. НапримСр, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ сСрвис Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² SomeModule.forRoot(someConfig).

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π² Ρ‚Π°ΠΊΠΎΠΉ ситуации ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ providedIn: ‘root’. Π­Ρ‚ΠΎ даст Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ сСрвис Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй Π² Angular 2

Π”ΠΎΠ±Ρ€Ρ‹ΠΉ Π²Π΅Ρ‡Π΅Ρ€, ΡƒΠ²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Π΄Π°ΠΌΡ‹ ΠΈ господа!

ΠŸΡ€ΠΈ всСй Π½Π΅ΠΎΡΠ»Π°Π±Π΅Π²Π°ΡŽΡ‰Π΅ΠΉ популярности Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° AngularJS ΠΌΡ‹ всС-Ρ‚Π°ΠΊΠΈ Π½Π΅ успСли ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒΡΡ с ΠΊΠ½ΠΈΠ³ΠΎΠΉ ΠΏΠΎ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒΡΡ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ ΠΏΠΎΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒΡΡ: насколько Π²Π°ΠΌ ΠΈΠΌΠΏΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΎΡ‚ эта Ρ€Π°Π±ΠΎΡ‚Π°, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΊΡ€ΠΎΠΌΠ΅ AngularJS ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ контСкст JavaScript-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ?

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Под ΠΊΠ°Ρ‚ΠΎΠΌ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ рСгулярно обновляСмой ΡΡ‚Π°Ρ‚ΡŒΠΈ Паскаля ΠŸΡ€Π΅Ρ…Ρ‚Π° (вСрсия ΠΎΡ‚ 12 октября 2015 Π³ΠΎΠ΄Π°), Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΎ Ρ‚Π°ΠΊΠΈΡ… высоких матСриях, ΠΊΠ°ΠΊ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй Π² AngularJs ΠΈ, Ρ‡Ρ‚ΠΎ самоС интСрСсноС, Ρ‚Π΅Ρ… Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΆΠ΄ΡƒΡ‚ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π² Angular 2.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй всСгда Π±Ρ‹Π»ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… ΠΈ ΠΊΠΎΠ·Ρ‹Ρ€Π½Ρ‹Ρ… особСнностСй Angular. Π˜Ρ‚Π°ΠΊ, этот Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ позволяСт Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ зависимости Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… прилоТСния; ΠΏΡ€ΠΈ этом Π½Π΅ трСбуСтся Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ эти зависимости ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ, Π»ΠΈΠ±ΠΎ Π² ΠΊΠ°ΠΊΠΈΡ… зависимостях ΠΎΠ½ΠΈ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ. Однако, оказываСтся, Ρ‡Ρ‚ΠΎ соврСмСнный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ внСдрСния зависимостСй (Π² Angular 1) ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдстоит Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π² Angular 2, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π½ΠΎΠ²ΠΎΠ³ΠΎ поколСния. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π½ΠΎΠ²ΠΎΠΉ систСмС внСдрСния зависимостСй β€” для Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΉ.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ Β«Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй» (DI) ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с DI Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π² Angular 1.

Π’ΠΎΠΉΡ‚Π° Π”ΠΆΠΈΠ½Π° сдСлал ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠΈ зависимостСй Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ ng-conf 2014. Π’ своСм выступлСнии ΠΎΠ½ ΠΈΠ·Π»ΠΎΠΆΠΈΠ» ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ создания Π½ΠΎΠ²ΠΎΠΉ систСмы внСдрСния зависимостСй, которая Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ для Angular 2, описал ΠΈΠ΄Π΅ΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½Π° базируСтся. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ Ρ‡Π΅Ρ‚ΠΊΠΎ описал, Ρ‡Ρ‚ΠΎ DI ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π² Π΄Π²ΡƒΡ… ипостасях: ΠΊΠ°ΠΊ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктирования ΠΈ ΠΊΠ°ΠΊ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ примСнСния DI, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ систСмС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ сборки зависимостСй. Π­Ρ‚Ρƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ всю эту ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ

Для Π½Π°Ρ‡Π°Π»Π° рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ разбСрСмся, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Π½Π΅ΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚.

НичСго особСнного. ИмССм класс Car
с конструктором, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π·Π°Π΄Π°Π΅ΠΌ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° car (Β«Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΡŒΒ»), ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ Π½Π°ΠΌ понадобится. Π’ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с этим ΠΊΠΎΠ΄ΠΎΠΌ? Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, конструктор Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ присваиваСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ свойствам, Π½ΠΎ ΠΈ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ создаСтся ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. НапримСр, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ engine (Β«Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒΒ») создаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ конструктора Engine
, Tires
(ΡˆΠΈΠ½Ρ‹) ΠΏΠΎ-Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌΡƒ, прСдставляСт собой интСрфСйс-ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ, Π° doors
(Π΄Π²Π΅Ρ€Ρ†Ρ‹) Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π² качСствС Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€Π° сСрвисов.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слоТно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Π΅Ρ‰Π΅ слоТнСС Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Волько Π²ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ сСбС, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот класс. Как Π²Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π±Ρ‹ Π² этом ΠΊΠΎΠ΄Π΅ Engine
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ MockEngine
? ΠŸΡ€ΠΈ написании тСстов ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сцСнарии, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ наш ΠΊΠΎΠ΄, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сцСнария трСбуСтся собствСнная конфигурация. Если Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ тСстируСмый ΠΊΠΎΠ΄, Ρ‚ΠΎ подразумСваСтся, Ρ‡Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ использования. Π§Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ нас ΠΊ тСзису, Ρ‡Ρ‚ΠΎ тСстируСмый ΠΊΠΎΠ΄ = ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для тСстирования? Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто, ΠΈ Π²Ρ‹ ΡƒΠΆΠ΅, вСроятно, ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΎ Ρ‡Π΅ΠΌ Ρ€Π΅Ρ‡ΡŒ. МСняСм ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ:

ΠœΡ‹ просто вынСсли созданиС зависимости ΠΈΠ· конструктора ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ конструктора – Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½Π° рассчитываСт Π½Π° всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости. Π’ ΠΊΠΎΠ΄Π΅ Π½Π΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ, ΠΌΡ‹ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ пСрСмСстили ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° созданиС этих зависимостСй Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅. Если Π±Ρ‹ ΠΌΡ‹ сСйчас Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ car, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π±Ρ‹ всСго лишь ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости конструктору:

ΠšΡ€ΡƒΡ‚ΠΎ? Π’Π΅ΠΏΠ΅Ρ€ΡŒ зависимости ΠΎΡ‚Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΡ‚ нашСго класса, Ρ‡Ρ‚ΠΎ позволяСт Π½Π°ΠΌ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΌΠΎΠΊ-зависимости ΠΏΡ€ΠΈ написании тСстов:

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚Π΅, это ΠΈ Π΅ΡΡ‚ΡŒ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимости. Π’ΠΎΡ‡Π½Π΅Π΅, ΠΈΠΌΠ΅Π½Π½ΠΎ этот ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Π΅Ρ‰Π΅ называСтся «Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ конструктора«. Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π΄Π²Π° ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°: Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ класса (setter injection) ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· интСрфСйс (interface injection), Π½ΠΎ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π²ΠΎΡ‚ ΠΌΡ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ DI, Π½ΠΎ Π³Π΄Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ систСма DI? Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, ΠΌΡ‹ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ сдвинули ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° созданиС зависимостСй Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅. ИмСнно Π² этом Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ наша новая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. ΠšΡ‚ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ сборку всСх этих зависимостСй для нас? ΠœΡ‹ сами.

БСйчас Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main. Π”Π΅Π»Π°Ρ‚ΡŒ это Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ вСсьма ΠΎΠ±Ρ€Π΅ΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, особСнно ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ роста прилоТСния. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ?

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй ΠΊΠ°ΠΊ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй ΠΊΠ°ΠΊ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ. Как извСстно, Π² Angular 1 имССтся собствСнная систСма DI, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСрвисы ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹; Ρ‚Π°ΠΊΠΆΠ΅ с Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ зависимости Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. НапримСр, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наш класс Car
Π² Angular 1:

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ рСгистрируСм наш Car
ΠΊΠ°ΠΊ сСрвис ΠΈ всякий Ρ€Π°Π·, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ Π΅Π³ΠΎ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚ Π½Π΅Π³ΠΎ экзСмпляр-ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ, ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π·Π°ΠΌΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡΡΡŒ ΠΎ создании Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… зависимостСй для «автомобиля».

ВсС классно, Π½ΠΎ выясняСтся, Ρ‡Ρ‚ΠΎ Ρƒ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° DI всС-Ρ‚Π°ΠΊΠΈ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСвСсти Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй Π² Angular Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй Π² Angular 2

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π°, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ, Π»Π΅ΠΆΠ°Ρ‰ΡƒΡŽ Π² основС DI Π² Angular 2. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ рисунок ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½ΠΎΠ²ΠΎΠΉ систСмы DI.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй Π² Angular 2 ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… элСмСнтов:

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² прСдставлСниС ΠΎΠ± этой ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, рассмотрим, ΠΊΠ°ΠΊ ΠΎΠ½Π° рСализуСтся Π² ΠΊΠΎΠ΄Π΅. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с нашим классом Car
ΠΈ Π΅Π³ΠΎ зависимостями. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй Π² Angular 2, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ экзСмпляр Car
:

ΠœΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ· Angular 2 Injector
, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ статичСскиС API для создания ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ΠΎΠ². ΠœΠ΅Ρ‚ΠΎΠ΄ resolveAndCreate()
– это, ΠΏΠΎ сути, фабричная функция, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π°Ρ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ список ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ². ВскорС ΠΌΡ‹ обсудим, ΠΊΠ°ΠΊ прСдполагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти классы Π² качСствС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ², Π½ΠΎ ΠΏΠΎΠΊΠ° сосрСдоточимся Π½Π° injector.get()
. Π’ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΌΡ‹ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ экзСмпляр Car
Π² послСднСй строкС? Как наш ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ ΡƒΠ·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ зависимости Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Β«carΒ»? Π§Ρ‚ΠΎ ΠΆ, рассмотрим класс Car
…

ΠœΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ· Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ Inject ΠΈ примСняСм Π΅Π΅ Π² качСствС Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ нашСго конструктора.

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Inject
прикрСпляСт ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ классу Car
, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ‚Π΅ΠΌ потрСбляСтся нашСй систСмой DI. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ здСсь Π΄Π΅Π»Π°Π΅ΠΌ: сообщаСм DI, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ конструктора Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ экзСмпляром Ρ‚ΠΈΠΏΠ° Engine
, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Ρ‚ΠΈΠΏΠ° Tires
ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ β€” Ρ‚ΠΈΠΏΠ° Doors
. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ этот ΠΊΠΎΠ΄ Π² Π΄ΡƒΡ…Π΅ TypeScript, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ выглядСл Π±ΠΎΠ»Π΅Π΅ СстСствСнно:

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, наш класс ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ собствСнныС зависимости, Π° DI ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Car
. Но ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ ΡƒΠ·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚? Π—Π΄Π΅ΡΡŒ-Ρ‚ΠΎ Π² ΠΈΠ³Ρ€Ρƒ ΠΈ Π²ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ resolveAndCreate()
, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ список классов?

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ вопрос, ΠΊΠ°ΠΊ этот список классов Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² качСствС списка ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ².
ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ это просто сокращСнный синтаксис. Если ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΈ пространный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Ρ‚ΠΎ ситуация нСсколько прояснится:

Π£ нас Π΅ΡΡ‚ΡŒ функция provide()
, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠΌ Π»ΠΈΠ±ΠΎ строкой. Если сСйчас ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ эти ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹, Ρ‚ΠΎ становится Π³ΠΎΡ€Π°Π·Π΄ΠΎ понятнСС, Ρ‡Ρ‚ΠΎ происходит. ΠœΡ‹ прСдоставляСм экзСмпляр Ρ‚ΠΈΠΏΠ° Car
Ρ‡Π΅Ρ€Π΅Π· класс Car
, Ρ‚ΠΈΠΏ Engine
Ρ‡Π΅Ρ€Π΅Π· класс Engine
ΠΈ Ρ‚.Π΄. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ-Ρ€Π΅Ρ†Π΅ΠΏΡ‚, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅. Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΌΡ‹ Π½Π΅ просто сообщаСм ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Ρƒ, ΠΊΠ°ΠΊΠΈΠ΅ зависимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²ΠΎ всСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ описываСм, ΠΊΠ°ΠΊ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этих зависимостСй.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ вопрос: ΠΊΠΎΠ³Π΄Π° ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ синтаксис вмСсто Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ? Π—Π°Ρ‡Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ provide(Foo, )
, Ссли ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΎΠ΄Π½ΠΈΠΌ Foo, Π²Π΅Ρ€Π½ΠΎ? Π”Π°, Π²Π΅Ρ€Π½ΠΎ. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ сразу Π½Π°Ρ‡Π°Π»ΠΈ с сокращСнного синтаксиса. Однако Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ синтаксис ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ большиС, ΠΎΡ‡Π΅Π½ΡŒ большиС возмоТности. ВзглянитС Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°.

Π’Π΅Ρ€Π½ΠΎ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ практичСски Π½Π° Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Engine
на класс OtherEngine
. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ запросим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Engine
, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ экзСмпляр класса OtherEngine
.
Π­Ρ‚ΠΎ нСвСроятно ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π½, Π½ΠΎ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΊΠ°ΠΊ интСрфСйс, привязывая Π΅Π³ΠΎ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΈΠ½ΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, замСняя Π΅Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠΌ ΠΈ Π½Π΅ трогая ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ΄.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй Π² Angular 2 Ρ‚Π°ΠΊΠΆΠ΅ привносит Π΅Ρ‰Π΅ ΠΏΠ°Ρ€Ρƒ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ² ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ², ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²

Иногда ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ экзСмпляр класса, Π° просто ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ конфигурация. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с DI Π² Angular 2 прСдусматриваСт нСсколько Ρ€Π΅Ρ†Π΅ΠΏΡ‚ΠΎΠ². Π”Π°Π²Π°ΠΉΡ‚Π΅ быстро пробСТимся ΠΏΠΎ Π½ΠΈΠΌ.

МоТно ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ простоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ

Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ простыС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ значСния.

МоТно ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€-псСвдоним Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π”Π°, наши Π»ΡŽΠ±ΠΈΠΌΡ‹Π΅ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ

РазумССтся, Ρ„Π°Π±Ρ€ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ собствСнныС зависимости. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ зависимости Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅, достаточно просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ этой Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅ список ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ²:

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @Optional
позволяСт ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ зависимости ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅. Π­Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ рассчитываСт Π½Π° ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π° Ссли эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° оказываСтся нСдоступна – Π½ΡƒΠΆΠ΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΡ‚ΠΊΠ°Ρ‚Π°.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, DI Π² Angular 2 Ρ€Π΅ΡˆΠ°Π΅Ρ‚ практичСски всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΠ΅ с DI Π² Angular. Но ΠΎΠ΄ΠΈΠ½ вопрос ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ обсудили. Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π»ΠΈ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΈ Π½ΠΎΠ²ΠΎΠΌ DI? Π”Π°.

ΠžΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Π΅ зависимости ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Ρ‹

Если Π½Π°ΠΌ понадобится одноразовая Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ (transient dependency) – такая, ΠΏΡ€ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°ΠΌ всСгда трСбуСтся Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр, Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°:

Π€Π°Π±Ρ€ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ экзСмпляры классов. Π­Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΈ.

МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Injector.resolveAndCreateChild()
. Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ привносит собствСнныС привязки, ΠΈ этот экзСмпляр Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Π°.

Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Ρ‹ интСрСсны Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этим. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ привязку ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Π΅, Ссли Π½Π° Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Π΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ привязки для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° Π½Π΅ зарСгистрировано. На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ схСмС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ происходит:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dependency injection Π² angular

На рисункС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ‚Ρ€ΠΈ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Π°, Π΄Π²Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… – Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΌΡ‹ запросим Ρƒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Π° экзСмпляр Ρ‚ΠΈΠΏΠ° Car, Ρ‚ΠΎ этот Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ создаст ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Β«carΒ». Однако Β«engineΒ» (Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ) Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, Π° Β«tiresΒ» (ΡˆΠΈΠ½Ρ‹) ΠΈ Β«doorsΒ» (Π΄Π²Π΅Ρ€Ρ†Ρ‹) – самым Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΌ ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ΠΎΠ². ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅Ρ‡Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ².

МоТно ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ зависимостСй, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Однако это Ρ‚Π΅ΠΌΠ° для Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Как ΠΆΠ΅ всС это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Angular 2?

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ рассмотрСли Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй Π² Angular 2, Π΄Π°Π²Π°ΠΉΡ‚Π΅ обсудим, ΠΊΠ°ΠΊ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°. Π”ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ ΠΌΡ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ΠΊΠΎΠ³Π΄Π° собираСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Angular 2? К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΠΊΠΎΠΌΠ°Π½Π΄Π° Angular Π½Π΅ ΠΆΠ°Π»Π΅Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ сил, ΠΈ создала красивый API, ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ всю ΠΌΠ°ΡˆΠΈΠ½Π΅Ρ€ΠΈΡŽ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΡ€ΠΈ сборкС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Angular 2.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ простой ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Angular 2.

НичСго особСнного. Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ NameService
, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² конструкторС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π’Π°ΠΊΠΎΠΉ сСрвис ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного. ΠŸΡ€ΠΎΡΡ‚ΠΎ создаСм класс. Π—Π°Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ Π² нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ доступ ΠΊΠ°ΠΊ ΠΊ внСдряСмому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Ρƒ нашСго прилоТСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°. Но ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? ΠœΡ‹ Π΅Ρ‰Π΅ Π΄Π°ΠΆΠ΅ Π½Π΅ создали ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€.

ΠœΠ΅Ρ‚ΠΎΠ΄ bootstrap()
занимаСтся созданиСм ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Π° для нашСго прилоТСния ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅. Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ список ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΈ этот список Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ нСпосрСдствСнно ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€Ρƒ прямо Π½Π° этапС Π΅Π³ΠΎ создания. Π˜Π½Ρ‹ΠΌΠΈ словами, Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ здСсь ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

Π’ΠΎΡ‚ ΠΈ всС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, пСрСходя ΠΊ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡŽ ΠΊΠ°ΠΊ ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΌΡƒ, ΠΌΡ‹ примСняСм ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ @Inject
.

Π›ΠΈΠ±ΠΎ, Ссли остановимся Π½Π° TypeScript, ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ конструктору:

Π¨ΠΈΠΊΠ°Ρ€Π½ΠΎ! Вся нутрянка Angular чудСсным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ исчСзла! Но остаСтся Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ вопрос: Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π°ΠΌ понадобится иная конфигурация привязок?

Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ сСрвис NameService
, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… всСго прилоТСния для Ρ‚ΠΈΠΏΠ° NameService
, Π½ΠΎ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ трСбуСтся ΠΈΠ½ΠΎΠΉ сСрвис? Π—Π΄Π΅ΡΡŒ-Ρ‚ΠΎ Π½Π°ΠΌ ΠΈ пригодится свойство providers
Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Component
. Оно позволяСт Π½Π°ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ (Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ).

Поясню: providers
Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ экзСмпляры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒΡΡ. Оно ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ для этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Как Π±Ρ‹Π»ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π°ΡˆΠΈΡ… привязок, Ρ‚ΠΎΡ‡Π½Π΅Π΅ β€” ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ. НапримСр, свойство viewProviders позволяСт ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ доступ ΠΊ зависимостям Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для прСдставлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π½ΠΎ Π½Π΅ для Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ².

Новая систСма внСдрСния зависимостСй Π² Angular Ρ€Π΅ΡˆΠ°Π΅Ρ‚ всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΠ΅ с DI Π² Angular 1. Π‘ΠΎΠ»ΡŒΡˆΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π½. Π­Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Π°Ρ систСма, Π΄Π°ΠΆΠ΅ Π±Π΅Π· Angular 2.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *