di-box
TypeScript icon, indicating that this package has built-in type declarations

0.2.2 • Public • Published

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.

Для Chrome

Для Firefox

Сделано с душой ❤️

Буду рад, если пакет будет полезен.

Поставьте github ⭐ - добавьте энергии автору для развития и поддержки.

Dependents (4)

Package Sidebar

Install

npm i di-box

Weekly Downloads

6

Version

0.2.2

License

MIT

Unpacked Size

15.8 kB

Total Files

5

Last publish

Collaborators

  • kraut-dps