di-box
Легкий вариант реализации внедрения зависимости ( Dependency injection ).
Пример использования:
import {Box} from "di-box";
class Service {
work() {}
}
class App {
oneService;
main() {
this.oneService().work();
}
}
class AppBox extends Box {
App;
Service;
newService() {
return new this.Service();
}
oneService() {
return this.one( this.newService );
}
newApp() {
const oApp = new this.App();
oApp.oneService = this.oneService;
return oApp;
}
}
const oBox = new AppBox();
oBox.Service = Service;
oBox.App = App;
const oApp = oBox.newApp();
oApp.main();
Запустить в Codesandbox ( версии js и ts с интерфейсами )
По умолчанию автоматически проходит по всем свойствам объекта Box и вызывает ошибку, если хоть одно свойство undefined, предыдущий пример:
const oBox = new AppBox();
oBox.Service = Service;
//oBox.App = App;
const oApp = oBox.newApp(); // будет ошибка di-box App is undefined
Можно убрать эту проверку:
const oBox = new AppBox( { bNeedSelfCheck: false } );
Таким же образом по умолчанию проверяет все объекты, возвращаемые функциями с префиксом "new":
newApp() {
const oApp = new this.App();
//oApp.oneService = this.oneService;
return oApp; // будет ошибка di-box oneService is undefined
}
Можно убрать эту проверку:
const oBox = new AppBox( { sNeedCheckPrefix: null } );
Пропуск проверки в конкретном случае:
newXhr() {
this.skipCheck();
return new XMLHttpRequest();
}
Сброс созданных синглетонов/сервисов:
oBox.reset();
Соединение нескольких Box:
class Box1 extends Box {
...
oneService() {
...
}
...
}
class Box2 extends Box {
...
oneService;
}
const oBox1 = new Box1();
...
const oBox2 = new Box2();
...
oBox2.oneService = oBox1.oneService;
...
Blackboxing
При отладке, может очень мешать заход в библиотеку. Поможет специальный инструмент blackbox.
❤️
Сделано с душой Буду рад, если пакет будет полезен.
Поставьте github ⭐ - добавьте энергии автору для развития и поддержки.