springbokjs-di

0.9.0 • Public • Published

springbokjs-di NPM version Build Status Coverage

Dependency injection library

How to use

ES5

lib/a.js a simple singleton

exports.A = (function() {
    var A = function() {
    };
    A.singleton = true;
 
    A.prototype.sayHello = function(name) {
        return 'Hello ' + name + '!';
    };
    return A;
})();

lib/b.js b has a dependency with a

exports.B = (function() {
    var B = function() {
    };
    B.singleton = true;
    B.dependencies = ['a'];
 
    B.prototype.sayHello = function(name) {
        return this.a.sayHello(name);
    };
    return B;
})();

lib/class1.js An example of non singleton class

exports.Class1 = (function() {
    var Class1 = function(name) {
        this.name = name;
    };
    Class1.prototype.sayHello = function() {
        return 'Hello ' + this.name + '!';
    };
    return Class1;
})();

lib/class2.js For classes, the dependencies are resolved when a class is instancied

exports.Class2 = (function() {
    var Class2 = function() {
    };
    Class2.dependencies = ['a'];
 
    Class2.prototype.setName = function(name) {
        this.name = name;
    };
    Class2.prototype.sayHello = function() {
        return this.a.sayHello(this.name);
    };
    return Class2;
})();

app.js

var diUtils = require('springbokjs-di');
var Di = diUtils.Di;
var di = new Di();
diUtils.directory(di, 'lib/').then(function() { // load classes from the directory
    return di.a.then(function(a) {
        a.sayHello('James');
    }).then(function() {
        return di.createInstance('Class1', ['James']).then(function(class1) {
            class1.sayHello();
        })
    });
});
 

ES6 with es6like-class

lib/a.js a simple singleton

export var A = newClass({
    static: {
        singleton: true
    },
 
    sayHello(name) {
        return 'Hello ' + name + '!';
    };
});

lib/b.js b has a dependency with a

export var B = newClass({
    static: {
        singleton: true,
        dependencies: ['a']
    },
 
    sayHello(name) {
        return this.a.sayHello(name);
    };
});

lib/class1.js An example of non singleton class

export class Class1 {
    constructor(name) {
        this.name = name;
    }
 
    sayHello() {
        return 'Hello ' + this.name + '!';
    }
}

lib/class2.js For classes, the dependencies are resolved when a class is instancied

export var Class2 = newClass({
    static: {
        dependencies: ['a']
    },
    setName(name) {
        this.name = name;
    },
    sayHello() {
        return this.a.sayHello(this.name);
    }
});

app.js

var diUtils = require('springbokjs-di');
var Di = diUtils.Di;
var di = new Di();
diUtils.directory(di, 'classes/').then(() => { // load classes from the directory
    return di.a.then((a) => {
        a.sayHello('James');
    }).then(() => {
        return di.createInstance('Class1', ['James']).then((class1) => {
            class1.sayHello();
        })
    });
});
 

Package Sidebar

Install

npm i springbokjs-di

Weekly Downloads

1

Version

0.9.0

License

MIT

Last publish

Collaborators

  • churpeau