1.0.2 • Published 10 years ago

javascript-dependency-injection v1.0.2

Weekly downloads
1
License
MIT
Repository
github
Last release
10 years ago

Get this with Bower

Build Status Coverage Status Dependency Status devDependency Status Code Climate Inline docs

Gitter

Javascript Dependency Injection library

DI makes classes accessible by a contract. Instances are created when requested and dependencies are injected into the constructor, facilitating lazy initialization and loose coupling between classes.

As an example, consider a User and Persitance classes:

function WebSql(name, fieldList)  {
    this.persist = function (obj) {
        console.log('WebSQL will persist:');
        fieldList.forEach(function (field) {
            console.log('    ' + field + ': ' + obj[field]);
        });
    }
}

function IndexDB(name, fieldList)  {
    this.persist = function (obj) {
        console.log('IndexDB will persist:');
        fieldList.forEach(function (field) {
            console.log('    ' + field + ': ' + obj[field]);
        });
    }
}

function User(email, passwd, storage, role) {    // the `storoge` parameter holds an instance
    this.email = email;
    this.passwd = passwd;
    this.role = role;

    this.save = function () {
        storage.persist(this);
    };
}

With these classes in our pocket its time to setup the relations between them. The function that does this has the following signature

 function (<contract name>, 
           <class reference>, 
           [optional list of constructor arguments], 
           {optional configuration object} ) 
           

Or just in code:

var di = new DI();

di.register('user', User, [null, 'welcome', 'websql', 'nobody']);
di.register('websql', WebSql, ['userTable', ['email','passwd', 'role']], {singleton: true});
di.register('indexdb', IndexDB, ['userTable', ['email','passwd', 'role']], {singleton: true});
      

Note that the provied constructor arguments are default values or contract names. From now it is easy to create instances:

var user1 = di.getInstance('user', ['john@exampe.com']),
        -> email: 'john@exampe.com', passwd: 'welcome', storage : WebSQL instance, role: 'nobody'
    user2 = di.getInstance('user', ['john@exampe.com', 'newSecret']); // define a new password
        -> email: 'john@exampe.com', passwd: 'newSecret', storage : WebSQL instance, role: 'nobody'
        
if (user1 instanceof User) { /* user1 is an instance of User!! */ }

But it is also possible to use IndexDB as the persistance class:

var user = di.getInstance('user', ['john@exampe.com', null, 'indexdb']),               // The password is set to null too!
        -> email: 'john@exampe.com', passwd: null, storage : IndexDB instance, role: 'nobody'
    root = di.getInstance('user', ['john@exampe.com', undefined, 'indexdb', 'admin']); 
        -> email: 'john@exampe.com', passwd: 'welcome', storage : IndexDB instance, role: 'admin'
        

Checkout more detailed the documentation here

Gulp tasks

Install the dependencies as follows

$> npm install

To minify the library

$> gulp

To run the tests

$> gulp test

Installation

$> bower install javascript-dependency-injection
2.0.0-beta.12

10 years ago

2.0.0-beta.11

10 years ago

2.0.0-beta.10

10 years ago

2.0.0-beta.9

10 years ago

2.0.0-beta.8

10 years ago

2.0.0-beta.7

10 years ago

2.0.0-beta.6

10 years ago

2.0.0-beta.5

10 years ago

2.0.0-beta.4

10 years ago

2.0.0-beta.3

10 years ago

2.0.0-beta.2

10 years ago

2.0.0-beta.1

10 years ago

1.0.2

10 years ago