promise-di

Simple, promise-based dependency injection container.

Usage no npm install needed!

<script type="module">
  import promiseDi from 'https://cdn.skypack.dev/promise-di';
</script>

README

promise-di

Simple, promise-based dependency injection container.

Usage

Di.Container(context, global): Container - create new container instance, context - any abstract object object, passed to service as dep global - services cached in this object, if service not depends on context

Di.Container.get(Prototype) - get configured instance from given service Prototype

Define service

function Logger(context) {
    var logger = {
        debug: function debug(msg) {
            console.log('log:', context, msg);
        }
    };

    return logger;
}
Logger._di = [Context, 'Logger'];

function Controller(logger) {
    console.log(logger.debug('message'));
}
Controller._di = [Logger, 'Controller'];


var Di = require('promise-di');
var cache = {};
var context = {
    test: 123
};
var container = Di.Container(context, cache);

var controller = container.get(Controller);  //outputs 'log: {test: 123}, message'

Handling errors

var Di = require('promise-di');

function Data(context) {
    throw new Error();

    return {test: 123};
}
Logger._di = [Context, 'Data'];

function Controller(data) {
    console.log(data);
}
Controller._di = [
    [Data, Di.cnt.data({test: 321})],
    'Controller'
];

var context = {
    test: 123
};
var controller = Di.Builder()(context).get(Controller);  //outputs '{test: 321}'