Skip to content

nestelia предоставляет полноценную систему dependency injection. Services регистрируются в modules и автоматически инжектируются в controllers и другие services.

@Injectable()

Пометьте класс как injectable, чтобы DI container мог им управлять:

typescript
import { Injectable } from "nestelia";

@Injectable()
class UserService {
  findAll() {
    return [{ id: 1, name: "John" }];
  }
}

@Inject()

Явно указывайте токен зависимости в конструкторе:

typescript
@Controller("/users")
class UserController {
  constructor(@Inject(UserService) private readonly userService: UserService) {}
}

@Optional()

Пометьте зависимость как опциональную — возвращает undefined, если недоступна:

typescript
constructor(
  @Inject("ANALYTICS") @Optional() private analytics?: AnalyticsService
) {}

Scopes

Управляйте жизненным циклом ваших services с помощью scopes:

typescript
import { Injectable, Scope } from "nestelia";

// По умолчанию — один экземпляр на всё приложение
@Injectable()
class SingletonService {}

// Новый экземпляр при каждом инжектировании
@Injectable({ scope: Scope.TRANSIENT })
class TransientService {}

// Новый экземпляр для каждого HTTP-запроса (через AsyncLocalStorage)
@Injectable({ scope: Scope.REQUEST })
class RequestScopedService {}
ScopeПоведение
SINGLETONЕдинственный экземпляр на всё приложение (по умолчанию)
TRANSIENTНовый экземпляр при каждом инжектировании
REQUESTНовый экземпляр для каждого HTTP-запроса

Регистрация Providers

Providers регистрируются в массиве providers module:

typescript
@Module({
  controllers: [UserController],
  providers: [UserService, DatabaseService],
})
class UserModule {}

Экспорт Providers

Чтобы сделать provider доступным для других modules, добавьте его в exports:

typescript
@Module({
  providers: [DatabaseService],
  exports: [DatabaseService],
})
class DatabaseModule {}

@Module({
  imports: [DatabaseModule],
  controllers: [UserController],
  providers: [UserService], // может инжектировать DatabaseService
})
class UserModule {}

Custom Providers

Смотрите страницу Custom Providers для ознакомления с value, class, factory и alias провайдерами.

Циклические зависимости

Смотрите страницу Forward References для разрешения циклических зависимостей с помощью forwardRef().

Распространяется по лицензии MIT.