Dependency injection for node.js
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
doc
test
.eslintrc
.gitignore
.npmignore
.travis.yml
LICENSE
README.md
example.js
index.html
index.js
logo@2x.png
package.json

README.md

di-ioc

NPM Version Build Status Coverage Status NPM Downloads License

Dependency injection.

Installation

npm install --save di-ioc

Example

util/index.js

module.exports = require('di-ioc').create()

// Start defining a `random` service:
.define('random', function () {
  var pseudoRandomBytes = require('crypto').pseudoRandomBytes;

  // The `random` service has one function:
  return {
    base64: function () {
      return pseudoRandomBytes(20).toString('base64');
    }
  };
});

app/index.js

module.exports = require('di-ioc').create()

// Greeting service which uses the random service: (arguments are detected)
.define('greet', function (random) {
  return function (name) {
    console.log('Hello ' + name + '! Here is a random string: ' + random.base64());
  };
});

index.js

module.exports = require('di-ioc').create(require)
.use('./util')
.use('./app')

.init();

var randomService = module.exports.util.random;

// eQ/NZnl7qusVN9hB/3nCn3wFKfY=
console.log(randomService.base64());

// Hello World! Here is a random string: dfLGC20CpCJxAZSu+uFp57dlJl0=
module.exports.app.greet();

Features

  • Export to a standard object which automatically initialises dependencies as needed. This is the object .init() creates.
  • Enforce that dependency graph divides into layers. For example, nothing in the 'util' submodule can depend on services in the 'app' submodule, due to the order of definition.
  • Nest components in to hierarchial modules and folders.
  • Instantiate one sub-tree of the hierarchy for testing.
  • Instantiate objects with injected dependencies for unit testing.
  • Define transient objects, using require('di-ioc').create().transient('serviceName', ...);.