0.3.1 • Published 2 years ago

@tuana9a/nanioc v0.3.1

Weekly downloads
-
License
GPL-3.0
Repository
github
Last release
2 years ago

nanioc

tuana9a Nodejs Inversion of Control

A simple dependency injection for nodejs

Installing

Using npm:

npm install @tuana9a/nanioc

Basic Usage

const nanioc = require("@tuana9a/nanioc");

class Test1 {
  test2;
}

class Test2 {
  test3;
}

class Test3 {}

const ioc = new nanioc.IOCContainer();
ioc.addBean(Test1, "test1");
ioc.addBean(Test2, "test2");
ioc.addBean(Test3, "test3");
ioc.di();

const test1 = ioc.getBean("test1").getInstance();
const test2 = ioc.getBean("test2").getInstance();
const test3 = ioc.getBean("test3").getInstance();

console.log(test1.test2 == test2); // true
console.log(test2.test3 == test3); // true

Ignore some props

const nanioc = require("@tuana9a/nanioc");

class Test1 {
  static _ignoreDeps = ["test3"]; // must be static
  test2;
  test3;
}

class Test2 {
  test1;
}

const ioc = new nanioc.IOCContainer();
ioc.addBean(Test1, "test1");
ioc.addBean(Test2, "test2");
ioc.di();

const test1 = ioc.getBean("test1").getInstance();
const test2 = ioc.getBean("test2").getInstance();

console.log(test1.test2 == test2); // true
console.log(test2.test1 == test1); // true
console.log(test1.test3); // undefined

or ignore all

class Test1 {
  static _ignoreDeps = ["test3", "__all"];
  test2;
  test3;
}

class Test2 {
  test1;
}

const ioc = new nanioc.IOCContainer();
ioc.addBean(Test1, "test1");
ioc.addBean(Test2, "test2");
ioc.di();

const test1 = ioc.getBean("test1").getInstance();
const test2 = ioc.getBean("test2").getInstance();

console.log(test2.test1 == test) // true;
console.log(test1.test3) // undefined;
console.log(test1.test2) // undefined;

Ignore missing beans exception

const nanioc = require("@tuana9a/nanioc");

class Test1 {
  test2;
  test3;
}

class Test2 {
  test1;
}

const ioc = new nanioc.IOCContainer({ ignoreMissingBean: true });
ioc.addBean(Test1, "test1");
ioc.addBean(Test2, "test2");
ioc.di(); // warn bean not found "test3"

const test1 = ioc.getBean("test1").getInstance();
const test2 = ioc.getBean("test2").getInstance();

console.log(test1.test2 == test2); // true
console.log(test1.test3); // undefined

Auto scan using global ioc

file test1.js

const { ioc } = require("@tuana9a/nanioc");

class Test1 {
  test2;
}

ioc.addBean(Test1, "test1");

module.exports = Test1;

file test2.js

const { ioc } = require("@tuana9a/nanioc");

class Test2 {
  test1;
}

ioc.addBean(Test2, "test2");

module.exports = Test2;

file main.js

const { ioc } = require("@tuana9a/nanioc");

// need auto scan because of lazy load of nodejs
ioc.autoScan(".", {
  absolute: true,
  fileNameFilter: (fileName) => fileName.match(/test\d\.js/),
  dirNameFilter: (dirName) => dirName != "node_modules" && dirName != ".git",
});
ioc.di();

const test1 = ioc.getBean("test1").getInstance();
const test2 = ioc.getBean("test2").getInstance();

console.log(test1.test2 == test2); // true
console.log(test2.test1 == test1); // true

Inject getter and setter

getter

class Test1 {
  test2;
}

class Test2 {
  test1;
}

const ioc = new nanioc.IOCContainer({ getter: true });
ioc.addBean(Test1, "test1");
ioc.addBean(Test2, "test2");
ioc.di();

const test1 = ioc.getBean("test1").getInstance();
const test2 = ioc.getBean("test2").getInstance();

console.log(test1.test2 == test2); // true
console.log(test2.test1 == test1); // true
console.log(test1.getTest2() == test2); // true
console.log(test2.getTest1() == test1); // true

setter

class Test1 {
  test2;
}

class Test2 {
  test1;
}

const test3 = new Test2();
test3.test1 = "not-a-real-test1";

const ioc = new nanioc.IOCContainer({ setter: true });
ioc.addBean(Test1, "test1");
ioc.addBean(Test2, "test2");
ioc.di();

const test1 = ioc.getBean("test1").getInstance();
const test2 = ioc.getBean("test2").getInstance();

console.log(test1.test2 == test2); // true
console.log(test2.test1 == test1); // true
test1.setTest2(test3);
console.log(test1.test2.test1 == "not-a-real-test1"); // true
0.3.0

2 years ago

0.2.0

2 years ago

0.2.1-a.1

2 years ago

0.2.1-a.2

2 years ago

0.3.1

2 years ago

0.1.3

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago