Newsworthy Presidential Mistakes

    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.

    Install

    npm i easen-di

    DownloadsWeekly Downloads

    11

    Version

    0.1.2

    License

    MIT

    Last publish

    Collaborators

    • rangoo