dependencyinjection
v1.3.0
Published
a simple dic
Downloads
5
Readme
Dependecy Injection Container for Node
A simple DIC and ServiceLocator based heavily on the Symfony DI Component.
Concepts
A container loads a requested service using a given ServiceLocator.
FileLoaders configure the containers for a set of Services.
But, we have require/import/whatever, right?
Differences with require and it's ../ hell
A small lists, because lists are cool:
- require does not support alias
- require does not support parameter binding
- require tends to be a pain in the *ss with it's relative paths
- require kind of enforces tight coupling of implementations
Installation
npm install dependencyinjection --save
Usage
Start by Creating a simple service, e.g. in the folder moduleA:
// @file moduleA/Service.js
function Service(message) {
this.message = message;
}
Service.prototype = {
test: function test() {
console.info(this.message);
}
}
module.exports = Service;
Now we have created our Service, we will add the service to our JSON definition file:
// @file moduleA/services.json
{
"services": {
"myService": {
"module": "Service",
"arguments": ["%foo"]
}
}
}
Notice how we define an argument that is a parameter called foo. For more info see ServiceDefinition
Let's add this parameter to our container definition:
// @file moduleA/services.json
{
"parameters": {
"foo": "bar"
},
"services": {
"myService": {
"module": "Service",
"arguments": ["%foo"]
}
}
}
Now that we have defined our services, we need to fire up the container, and let the JsonFileLoader do it's job:
import DIC from dependencyinjection;
const container = new DIC.Container(new DIC.ServiceLocator());
const loader = new DIC.JsonFileLoader(container);
loader.loadFile('ModuleAlias', __dirname + '/ModuleA/services.json')
That's it, you can now start using your services:
const myService = container.get('ModuleAlias/myService');
myService.test(); // will log "bar" to console.info
Documentation
Roadmap
- cool stuff
Author
- Jeroen "pinoniq" Meeus