Skip to content
NodeJS Dependency Injection
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example
lib
test
.gitignore
README.md
index.js
package.json

README.md

NodeJS Dependency Injection

In software engineering, dependency injection is a technique whereby one object supplies the dependencies of another object. A dependency is an object that can be used (a service). An injection is the passing of a dependency to a dependent object (a client) that would use it.

Installing

$ npm install --save nodejs-di

How to use

First of all you need to create dependency.json.

You can use next providers:

  • prototype
  • singleton
  • object

Prototype provider create your class everytime you use it. Singleton provider create your class only one time and inject link. Object provider include object to your class.

If you export injection class on object you need to write on dependency.json className. You can see example below.

{
  "name" : "calc",
  "objects" :
    {
      "mult" : {
        "resource": {"path" : "app/mult", "className" : "Mult"},
        "provider" : "prototype"
      },
      "plus" : {
        "resource": {"path" : "app/plus", "className" : "Plus"},
        "provider" : "prototype"
      },
      "calc": {
        "resource": {"path" : "app/calc", "className" : "Calc"},
        "provider" : "singleton",
        "dependency" :{
          "plusWorker" : "plus",
          "multWorker" : "mult"
        }
      }

    }
}

app/calc.js

class Calc {
    constructor() {
        this.multWorker = null;
        this.plusWorker = null;
    }

    mult(a, b) {
        return this.plusWorker.do(a, b);
    }

    plus(a, b) {
        return this.plusWorker.do(a, b);
    }
}

module.exports = {Calc};

app/mult.js

class Mult {
    do(a, b) {
        return a * b;
    }
}

module.exports = {Mult};

app/plus.js

class Plus {
    do(a, b) {
        return a + b;
    }
}

module.exports = {Plus};

index.js

const {container} = require('../index');

container.init(__dirname, 'dependency');

let calc = container.get('calc');

console.log(calc.plus(5, 6)); // Must return 11
console.log(calc.mult(5, 6)); // Must return 30

On container.init you need to set root dir for dependency file and dependency file name.

Also you can add node_module injection. For it you need to add on the start of path #. You can see example below

{
  "name" : "calc",
  "objects" :
    {
      "someModule": {
        "resource": {"path" : "#some-module", "className" : "SomeClass"},
        "provider" : "prototype"
      },
      "mult" : {
        "resource": {"path" : "app/mult", "className" : "Mult"},
        "provider" : "prototype"
      },
      "plus" : {
        "resource": {"path" : "app/plus", "className" : "Plus"},
        "provider" : "prototype"
      },
      "calc": {
        "resource": {"path" : "app/calc", "className" : "Calc"},
        "provider" : "singleton",
        "dependency" :{
          "plusWorker" : "plus",
          "multWorker" : "mult"
        }
      }

    }
}

License

This project is licensed under the MIT License

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.