sactive-di
v1.3.1
Published
Dependency injector for Node.js.
Downloads
6
Maintainers
Readme
sactive-di
Dependency injector for Node.js.
Installation
npm install sactive-di
Usage
sactive-di
只有已经绑定的实例才可以注入,参数前缀必须是$$
,否则会注入null
。
class Class1 {
test() {
return 'test';
}
}
class Class2 {
constructor($$class1) {
this.$$class1 = $$class1;
}
test() {
return 'test';
}
}
async function asyncFunc() {
return 'test';
}
async function asyncFunc2($$Class1) {
return $$Class1.test();
}
class Class3 {
constructor($$class1, $$class2, $$async, $$async2) {
this.$$class1 = $$class1;
this.$$class2 = $$class2;
this.$$async = $$async;
}
}
const Di = reuqire('sactive-di');
const di = new Di();
di.bindClass('class1', class1);
di.bindClass('class1', Class2);
di.bindClass('Class3', Class3);
di.bindFunction('async', asyncFunc);
di.bindFunction('async2', asyncFunc2);
let class3 = app.getInstance('$$class3');
class3.$$class2.test() // => 'test'
class3.$$class2.$$class1.test() // => 'test'
class3.$$class1.test() // => 'test'
class3.$$async.then(function(res) {
console.log(res) // => 'test'
});
class3.$$async2.then(function(res) {
console.log(res) // => 'test'
});
上面的例子,Class3
注入了四个依赖 $$class1
、$$class2
、$$async
、$$async2
,Class2
注入了依赖 $$class1
。
API
bindClass
绑定类,类在调用该方法之后,可以使用getInstance
获取到实例。
bindClass(name, class, options);
- name:
String
,给绑定的类命名,使用getInstance
获取实例时会用到。 - class:
Class
,要绑定的类。 - options:
Object
,选项:- singleton:
Boolean
,是否是单例,默认是true
。
- singleton:
注意,绑定的name
会自动加上$$
符号,获取时要加上$$
。
class Logger {
test() {
return 'test';
}
}
const di = new Di();
di.bindClass('logger', Logger);
let logger = di.getInstance('$$logger') //注意加上`$$`
logger.test() // => 'test'
bindFunction
绑定方法,可以使用getInstance
获取到实例,用于依赖注入。
这里获取到的实例并不是function
本身,而是它的执行结果,如果只是绑定function
,不需要执行它,使用bindInstance
。
bindFunction(name, func, options);
- name:
String
,给绑定的方法命名,使用getInstance
获取实例时会用到。 - func:
Function
,要绑定的方法。 - options:
Object
,选项:- singleton:
Boolean
,是否是单例,默认是true
。
- singleton:
注意,绑定的name
会自动加上$$
符号,获取时要加上$$
。
async function asyncFunc() {
return 'test';
}
function func() {
return 'test';
}
const arrowFunc = () => {
return 'test';
};
const di = new Di();
di.bindFunction('func', func);
di.bindFunction('async', asyncFunc);
di.bindFunction('arrow', arrowFunc);
di.getInstance('$$func') // => 'test'
di.getInstance('$$async') // => 'test'
di.getInstance('$$arrow') // => 'test'
bindInstance
绑定实例,可以使用getInstance
获取实例,用于依赖注入。
bindInstance(name, instance, options);
- name:
String
,给绑定的实例命名,使用getInstance
获取实例时会用到。 - instance:
any
,要绑定的实例,实例可以是任意类型,string
,object
,function
,class
等。 - options:
Object
,选项:- singleton:
Boolean
,是否是单例,默认是true
。
- singleton:
注意,绑定的name
会自动加上$$
符号,获取时要加上$$
。
function func() {
return 'test';
}
class Logger {
test() {
return 'test';
}
}
let student = {
name: 'xiaoming'
};
let name = 'xiaoqiang';
const di = new Di();
di.bindInstance('func', func);
di.bindInstance('logger', Logger);
di.bindInstance('student', student);
di.bindInstance('name', name);
di.getInstance('$$student'); // => {name: 'xiaoming'}
di.getInstance('$$name'); // => 'xiaoming'
di.getInstance('$$func')(); // => 'test'
let logger = new di.getInstance('$$Logger')();
logger.test(); // => 'test'
getInstance
获取实例,用于依赖注入。
注意,绑定的name
会自动加上$$
符号,获取时要加上$$
。
getInstance(name);
- name:
String
,实例名,加上$$
。
getInstances
获取多个实例,用于依赖注入。
注意,绑定的name
会自动加上$$
符号,获取时要加上$$
。
getInstances(names);
- names:
Array
,一组实例名,加上$$
,例如:di.getInstances(['$$logger', '$$test'])
。
deleteInstance
删除已经绑定的实例。
注意,绑定的name
会自动加上$$
符号,获取时要加上$$
。
deleteInstance(name);
- name:
String
,实例名,加上$$
。
deleteInstances
删除已经绑定的多个实例。
注意,绑定的name
会自动加上$$
符号,获取时要加上$$
。
deleteInstances(names);
- names:
Array
,一组实例名,加上$$
,例如:di.deleteInstances(['$$logger', '$$test'])
。
Tests
Install the dependencies, then run npm test
:
npm install
npm test
#coverage
npm run test:cov
TODO
- Engilsh Documentation