Преглед садржаја
Водич о убризгавању зависности у NestJS-у
Убризгавање зависности је моћан образац дизајна који омогућава лако повезивање објеката у вашем коду. У NestJS-у, оквиру заснованом на Node.js за изградњу високо перформантних и одрживих серверских апликација, убризгавање зависности је првокласна карактеристика.
Овај водич ће вас водити кроз процес убризгавања зависности у NestJS, од основних концепата до напредних техника. Почећемо са разумевањем шта је убризгавање зависности и зашто је корисно.
Шта је убризгавање зависности?
Убризгавање зависности је техника дизајна при којој објекти (зависности) креира и управља други објекат (контејнер). Контејнер је одговоран за додељивање зависности објектима који их захтевају.
Главна предност убризгавања зависности је да олакшава лабаво спајање између објеката. Када се објекти лабаво повежу, постају независни једни од других и могу се лако заменити или конфигурисати без утицаја на остатак кода.
Зашто је убризгавање зависности корисно у NestJS?
NestJS користи инверзију контроле и убризгавање зависности да би побољшао модуларност, тестибилност и одрживост апликација. Помоћу убризгавања зависности можете:
– Лако креирати и управљати зависностима
– Лако заменити имплементације зависности без промене зависног кода
– Аутоматски добити приступ зависностима када су вам потребне
– Омогућити лако тестирање ваших апликација Mocking зависности
– Побољшати одрживост кода раздвајањем зависности од логике апликације
Како убризгавати зависности у NestJS
Убризгавање зависности у NestJS се врши помоћу декоратора @Inject()
. Декоратор @Inject()
се користи за ознаку зависности које нека класа захтева. Контејнер за убризгавање NestJS-а ће тада аутоматски решити зависност и доделити је објекту.
typescript
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class AppService {
constructor(private readonly configService: ConfigService) {}
// ...
}
У горњем примеру, класа AppService
зависи од класе ConfigService
. Декоратор @Inject(ConfigService)
означава да контејнер за убризгавање треба да реши зависност ConfigService
и додели је конструктору класе AppService
.
Схватање ознака и опсега животног века
Поред основног убризгавања зависности, NestJS такође подржава ознаке и опсеге животног века за управљање зависностима.
Ознаке се користе за разликовање различитих имплементација исте зависности. На пример, можете имати ознаку PrimaryDb
за примарну базу података и ознаку SecondaryDb
за секундарну базу података.
Опсег животног века дефинише колико дуго живи зависност. У NestJS-у постоје три опсега животног века:
– Опсег прелазан значи да ће зависност бити креирана сваки пут када се затражи.
– Опсег захтева значи да ће зависност бити креирана за сваки HTTP захтев.
– Опсег апликације значи да ће зависност бити креирана једном и делити се у целој апликацији.
Напредне технике убризгања зависности
NestJS пружа бројне напредне технике за убризгавање зависности, укључујући:
– Убризгавање властитости: Позвољава вам да убризгавате вредности из конфигурационе датотеке или окружења у ваше класе.
– Убризгавање методе: Позвољава вам да убризгавате функције или методе у ваше класе.
– Множествено убризгавање: Позвољава вам да убризгавате вишеструке зависности у ваше класе.
– Промена опсега живота: Позвољава вам да промените опсег животног века зависности унутар појединачних класа или модула.
Закључак
Убризгавање зависности је моћна техника која може значајно побољшати дизајн, тестибилност и одрживост ваших NestJS апликација. Овладавањем техникама описаним у овом водичу, можете ефикасно управљати зависностима у својим апликацијама и креирати висококвалитетни, модуларни и добро тестирани софтвер.
Често постављана питања
1. Што је разлика између зависности и сервисa у NestJS-у?
Зависности су објекти које класа захтева за функционисање, док су сервиси објекти који пружају функционалност коју могу користити друге класе.
2. Како да користим ознаке приликом убризгавања зависности?
Да бисте користили ознаке, означите зависност користећи @Inject('my-custom-token')
. Такође морате да обезбедите провајдера за зависност у свом модулу.
3. Како да променим опсег животног века зависности?
Користите декоратор @Injectable({ scope: Scope.REQUEST })
на класу зависности да бисте променили њен опсег животног века.
4. Како да убризгам вредности из конфигурационе датотеке?
Користите декоратор @Value('config.my-value')
на променљивој да бисте убризгали вредност из конфигурационе датотеке.
5. Како да убризгам функцију или методу?
Користите декоратор @InjectMethod('my-method')
на променљивој да бисте убризгали функцију или методу.
6. Како да убризгам вишеструке зависности?
Користите декоратор @Inject()
са низом као аргументом да бисте убризгали вишеструке зависности.
7. Могу ли да користим NestJS за убризгавање зависности у друге оквире или библиотеке?
Да, NestJS пружа модул за спољне инјекције који можете користити за убризгавање зависности из NestJS-а у друге оквире или библиотеке.
8. Где могу пронаћи додатну информацију о убризгавању зависности у NestJS-у?
* NestJS документација о убризгавању зависности
* NestJS туторијал о убризгавању зависности