easen-di

0.1.2 • Public • Published

Easen DI

Travis Code Climate Coverage Status

It's a dependency injection container which requires ES6 (because of Proxy as safe way to provide services). It handles properly circular dependencies.

How to use

Firstly just create container:

const Di = require('easen-di')
let container = new Di()

There are two main methods to register services:

  • register to register dependency directly
container.register('environment', 'production')
container.register('SomeClass', SomeClass)
container.register('pow', x => x * x)
  • factory to create factory (it allows using other dependencies as well)
container.factory('environment', () => 'production')
container.factory('logger', ({ environment }) => {
  return environment === 'production' ? new JsonLogger() : new DevLogger()
})

Now, you can get dependency directly by get method:

container.get('logger') // JsonLogger

Or you can use safe getter:

container.getter.logger // JsonLogger

Getter is preferred for external services, as it can't be mutated and can be just treat as normal object in other services; It makes very simple to test functions as they are not dependent on DI container:

const container = new Di()
container.register('environment', 'production')

function createLogMethod({ environment }) {
   if (environment !== 'production') {
     return (...args) => console.log(...args)
   } else {
     return () => {}
   }
}

// Without DI
const log = createLogMethod({ environment: 'production' })
log('something')

// With DI
const log = createLogMethod(container.getter)
log('something')

// As a DI service
container.factory('log', createLogMethod)
container.getter.log('something')

Development

Mocha with Expect.js are used for tests, with Wallaby as additional runner for development. Code style standard is a little modified StandardJS.

Package Sidebar

Install

npm i easen-di

Weekly Downloads

3

Version

0.1.2

License

MIT

Last publish

Collaborators

  • rangoo