New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

javascript-dependency-injection

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

javascript-dependency-injection

Javscript dependency injection library

latest
Source
npmnpm
Version
1.0.2
Version published
Maintainers
1
Created
Source

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

Keywords

javascript

FAQs

Package last updated on 09 Apr 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts