dependencyinjection

1.3.0 • Public • Published

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

Readme

Keywords

none

Package Sidebar

Install

npm i dependencyinjection

Weekly Downloads

16

Version

1.3.0

License

MIT

Last publish

Collaborators

  • pinoniq