Skip to content

Внедрение зависимостей нового поколения для TypeScript

InferDIНаходите ошибки в зависимостях ещё до запуска

Компилятор проверяет граф зависимостей. Контейнер быстро получает сервисы и занимает меньше 3 KiB после gzip. Бизнес-логика остаётся обычным кодом TypeScript.

pnpm add @inferdi/inferdi
< 3 KiBразмер после gzip
6.23 nsполучение из кэша
0внешних зависимостей

Как устроено быстрое получение сервисов

Получение из кэша начинается с одного Map.get(). При первом создании сервиса режим по умолчанию сохраняет проверки во время выполнения.

Методика и полные результаты

Медианы восьми раундов бенчмарка на готовой production-сборке. Измеряются накладные расходы контейнера, а не пропускная способность приложения. .

TypeScript видит весь граф

Каждая регистрация возвращает новый тип контейнера. В нём записаны ключ, значение, время жизни, асинхронная связь и требования скоупа.

ts
import { 
Container
} from '@inferdi/inferdi'
class
Logger
{
info
(
message
: string) {}
} class
Database
{
findUser
(
id
: string) {
return {
id
}
} } class
UserRepo
{
constructor(readonly
logger
:
Logger
, readonly
database
:
Database
) {}
} const
container
= new
Container
()
.
registerClass
('logger',
Logger
, [])
.
registerClass
('database',
Database
, [])
.
registerClass
('users',
UserRepo
, ['logger', 'database'])
const
users
=
container
.
get
('users')
const users: UserRepo

Адаптеры фреймворков

Следующий шаг

Начните с корня композиции

Держите граф в одном месте, где все решения легко увидеть и изменить.