# projectx.di

> Di manager

Latest version **0.0.3-beta** (published 2023-02-24) · ISC license · 0 weekly downloads

## Install

```sh
npm install projectx.di
pnpm add projectx.di
yarn add projectx.di
bun add projectx.di
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.3-beta |
| Published | 2023-02-24 |
| First published | 2023-02-13 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 9.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Ivan Krotov |
| Maintainers | ivan_krotov |
| Keywords | dependency inject |

## Links

- npm: https://www.npmjs.com/package/projectx.di
- Repository: https://github.com/VanyaKrotov/projectx
- Homepage: https://github.com/VanyaKrotov/projectx#readme
- Issues: https://github.com/VanyaKrotov/projectx/issues
- npm.io page: https://npm.io/package/projectx.di

## Recent versions

- 0.0.3-beta (latest) — 2023-02-24
- 0.0.2-beta — 2023-02-23
- 0.0.1-beta — 2023-02-13

## README

# ProjectX.DI

[![ Версия npm ](https://badge.fury.io/js/projectx.di.svg)](https://badge.fury.io/js/projectx.di)

## Установка

```
npm i projectx.di
```

## Документация

Для чего нужен DI? Если вы разрабатываете приложение с использованием ООП то вы скорее всего столкнетесь с необходимостью подключения одного экземпляра класса к другому.

К примеру у нас есть состояние [projectx.state](https://github.com/VanyaKrotov/projectx/tree/main/packages/state) с набором необходимых экшенов для работы с данными, но нам также необходимо работать с сетью и каким-либо образом обрабытывать данные (реализовывать бизнесс логику) то наш класс состояния со временем разрастется до невиданных размеров, тут нам на помощь приходят сервисы, которые мы можем подключить и вынести часть функционала в них таким образом разгрузить состояние. Все супер, состояние небольшое все дублирование вынесено в сервис но что если функции этого сервиса необходимо в другом состоянии?! Создавать общий сервис и от него наследовать сервисы использующиеся в этих состояниях - вариант, но как по мне сложный, гораздо легче подключить сервис как зависимость к обоим состояниям и использовать ее.

### Описание функций и классов

- `Provider` - функция для создания провайдера для набора зависимостей.

  Возвращает методы для управления:

  - `register()` - метод регистрации зависимости;

  - `unregister()` - метод удаления зависимости;

  - `inject()` - метод захвата зависимости если она есть;

  - `injectAfterCreate()` - метод захвата зависимости если она есть, если нет ожидает регистрации;

  - `dispose()` - метод для сброса данных провайдера;

Пример:

```ts
class A {
  print() {
    return "A";
  }
}

class B {
  print() {
    return "B";
  }
}

const provider = new Provider("TestProvider");

provide.register(A);

const container = {
  a: provider.inject(A),
  b: null,
};

provider.injectAfterCreate(B).then((b) => {
  container.b = b;
});

provide.register(B);

container.a.print();
// A

container.b.print();
// Error! Сannot get property `b` of null...

// Иммитация пользовательского события
setTimeout(() => {
  container.b.print();
  // B
});
```

---
_Source: https://npm.io/package/projectx.di · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
