projectx.di v0.0.3-beta
ProjectX.DI
Установка
npm i projectx.di
Документация
Для чего нужен DI? Если вы разрабатываете приложение с использованием ООП то вы скорее всего столкнетесь с необходимостью подключения одного экземпляра класса к другому.
К примеру у нас есть состояние projectx.state с набором необходимых экшенов для работы с данными, но нам также необходимо работать с сетью и каким-либо образом обрабытывать данные (реализовывать бизнесс логику) то наш класс состояния со временем разрастется до невиданных размеров, тут нам на помощь приходят сервисы, которые мы можем подключить и вынести часть функционала в них таким образом разгрузить состояние. Все супер, состояние небольшое все дублирование вынесено в сервис но что если функции этого сервиса необходимо в другом состоянии?! Создавать общий сервис и от него наследовать сервисы использующиеся в этих состояниях - вариант, но как по мне сложный, гораздо легче подключить сервис как зависимость к обоим состояниям и использовать ее.
Описание функций и классов
Provider
- функция для создания провайдера для набора зависимостей.Возвращает методы для управления:
register()
- метод регистрации зависимости;unregister()
- метод удаления зависимости;inject()
- метод захвата зависимости если она есть;injectAfterCreate()
- метод захвата зависимости если она есть, если нет ожидает регистрации;dispose()
- метод для сброса данных провайдера;
Пример:
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
});