Skip to content
/ cdi Public

The Cool Dependency Injection. An easy to use intuitive dependency injection manager

License

Notifications You must be signed in to change notification settings

f3lang/cdi

Repository files navigation

CDI

Build Status Coverage Status Maintainability Package Quality

Cool Dependency Injection
A lightweight, powerful and very easy to use dependency injection framework.
Support singleton, prototype and custom scopes, configuration injection and handling of multiple instances of modules.

Usage

npm install --save cdi

and code:

let path = require('path');
let CDI = require('cdi');
let cdi = new cdi({
    moduleSrc: [path.join(__dirname, 'src')]
});
let myMainModule = cdi.getInstance('MainModule');
myMainModule.nowDoMyStuff();

// as i promised, simple as hell :D

simple example with module and configuration injection

src/wheels.js:

class Wheels {
    constructor(size) {
        this.size = size;
    }
}
module.exports = Wheels;
module.exports.inject = ['config:bike:wheels.size'];

src/bike.js:

class Bike {
    constructor(wheels) {
        this.wheels = wheels;
    }
}
module.exports = Bike;
module.exports.inject = ['Wheels'];

main.js:

const path = require('path');
const CDI = require('cdi');

const bikeConfig = {
    wheels: {
        size: 26
    }
};

let cdi = new CDI({
    moduleSrc: [path.join(__dirname, 'src')],
    cacheFile: path.join(__dirname, 'cache', 'cdi.json'),
    configurations: {
        bike: bikeConfig
    }
});

let myBike = cdi.getInstance('Bike');
// now you got your bike with injected wheels, which got the size information injected

ready for more?

more complex example with active usage of dependency trees

src/speed.js:

class Speed {
	constructor() {
		this.speed = 0;
	}
	
	setSpeed(speed) {
		this.speed = speed;
	}
}
module.exports = Speed;

src/wheel.js:

class Wheel {
    constructor(size, speed) {
        this.size = size;
        this.position = module.exports.tree;
        this.speed = speed;
    }
}
module.exports = Wheel;
module.exports.inject = ['config:bike:wheels.size', 'Speed:root'];

src/bike.js:

class Bike {
    constructor(frontWheel, backWheel) {
        this.wheels = {frontWheel, backWheel};
    }
}
module.exports = Bike;
module.exports.inject = ['Wheel:front', 'Wheel:back'];

main.js:

const path = require('path');
const CDI = require('cdi');

const bikeConfig = {
    wheels: {
        size: 26
    }
};

let cdi = new CDI({
    moduleSrc: [path.join(__dirname, 'src')],
    cacheFile: path.join(__dirname, 'cache', 'cdi.json'),
    configurations: {
        bike: bikeConfig
    }
});

let myBike = cdi.getInstance('Bike');
// now you got your bike with two injected wheels, which got the size information injected 
// and share one common speed instance

Documentation

I don't want to just copy paste documentation. So best head over to https://f3lang.github.io/cdi

Contribute

You want to make the world a better place and want to start with this module? awesome :D
Please read the contribution guidelines to get started and i'm looking forward to new stuff.

About

The Cool Dependency Injection. An easy to use intuitive dependency injection manager

Resources

License

Stars

Watchers

Forks

Packages

No packages published