1.1.2 • Published 6 years ago

dlocator v1.1.2

Weekly downloads
1
License
ISC
Repository
github
Last release
6 years ago

dlocator

Dlocator is a version of service locator pattern with dependencies and services. It look like dependency container combined with service locator.

Build Status

Installation

npm install dlocator --save

How to use

  • Create modules
  • Any module can provide a service
  • Any module can use other services, specified in module dependencies

API

const Application = require('dlocator'); Application is a class. Must get in constructor modules array and then init method must be called.

const Module = require('dlocator/module'); Module is a class. You must extend your module from that class. If you need you can override init(gets locator and puts it into this._locator by default), afterInit(gets nothing, called when all inits finished) methods and _services(must return a map of providing servicies) and _dependecies(must return a set of servicies) properties.

Example

Create Application(/app.js):

const Application = require('dlocator');
const modules = require('./modules/index.js');

const app = new Application(modules);
app.init();

Create 'Module1' with service 'test'(/modules/module1/index.js):

const Module = require('dlocator/module');

module.exports = class Module1 extends Module {

    async afterInit() {
        this._locator.getService('bp')(5);
    }
    
    get test() {
        return {
            foo: 'bar'
        }
    }

    get _dependecies() {
        return new Set(['bp']);
    }

    get _services() {
        return new Map([
            ['test', this.test]
        ]);
    }

}

Create 'Module2' with service 'bp'(/modules/module2/index.js):

const Module = require('dlocator/module');

module.exports = class Module2 extends Module {

    async afterInit() {
        console.dir(this._locator.getService('test').foo);
    }

    beepboop(num = 3) {
        for (let i = 0; i < num; i++) {
            console.log('beepboop');
        }
    }

    get _dependecies() {
        return new Set(['test']);
    }

    get _services() {
        return new Map([['bp', this.beepboop]]);
    }

}

Create modules list(/modules/index.js):

const Module1 = require('./modules/module1');
const Module2 = require('./modules/module2');

module.exports = [
    Module1,
    Module2,
];

Todos

  • Write more tests

License

ISC

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.2

6 years ago

1.0.0

6 years ago