easen-di
v0.1.2
Published
ES6 dependency injection container
Downloads
4
Maintainers
Readme
Easen DI
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.