ditor
v0.1.3
Published
Flexible Dependency injection mechanism
Downloads
3
Maintainers
Readme
DITOR
A Dependency Injection Detour solution, supplies a convinient way to inject once and use many times.
Installation
npm install -s ditor
Usage
const { Injector } = require('ditor');
var injector = new Injector({ x: 1 });
injector.invoke( ($, {x}) => console.log(x) );
How it works
Ditor injectors allow you to inject dependencies in one place, and use it in many places.
Without Injector
Dependencies must be injected from main to A to B to C in order to use it in C.
With Injector
Dependencies are injected once at the injector creation, then it can be used by C, as well as any other node in the chain.
Branches
You can create branches from an injector, adding more dependencies to it.
Basic Usage
const { Injector } = require('ditor');
var dependency = { x:1 };
var injector = new Injector(dependency);
var consumer = ($, dependency) => console.log(dependency);
injector.invoke(consumer);
// {x:1}
Multi-Dependencies
var a={x:1}, b={y:2};
var injector = new Injector({a,b});
var consumer = ($, {a, b}) => console.log(a, b);
injector.invoke(consumer);
// {x:1} {y:2}
nested-invoke
var a={x:1}, b={y:2};
var injector = new Injector({a,b});
var consumer1 = ($, {a}) => console.log(a);
var consumer2 = ($, {b}) => {
console.log(b);
$.invoke(consumer1)
};
injector.invoke(consumer2);
// {y:2}
// {x:1}
Code shorten
var dep1=1, dep2=2, dep3=3, dep4=4, dep5=5, dep6=6;
// without injector
var f1 = (dep1, dep2, dep3, dep4, dep5, dep6) => f2(dep1, dep2, dep3, dep4, dep5, dep6);
var f2 = (dep1, dep2, dep3, dep4, dep5, dep6) => f3(dep1, dep2, dep3, dep4, dep5, dep6);
var f3 = (dep1, dep2, dep3, dep4, dep5, dep6) => f4(dep1, dep2, dep3, dep4, dep5, dep6);
var f4 = (dep1, dep2, dep3, dep4, dep5, dep6) => f5(dep1, dep2, dep3, dep4, dep5, dep6);
var f5 = (dep1, dep2, dep3, dep4, dep5, dep6) => console.log(dep1, dep2, dep3, dep4, dep5, dep6);
f1(dep1, dep2, dep3, dep4, dep5, dep6)
// 1 2 3 4 5 6
// with injector
var f1 = ($) => $.invoke(f2);
var f2 = ($) => $.invoke(f3);
var f3 = ($) => $.invoke(f4);
var f4 = ($) => $.invoke(f5);
var f5 = ($, dep1, dep2, dep3, dep4, dep5, dep6) => console.log(dep1, dep2, dep3, dep4, dep5, dep6);
var injector = new Injector(dep1, dep2, dep3, dep4, dep5, dep6);
injector.invoke(f1);
// 1 2 3 4 5 6
Branches
var a={x:1}, b={y:2}, c={z:3};
var injector = new Injector({ a, b });
var main = ($,{a,b}) => {
console.log(a,b);
// c is not accessible here
var innerInjector = injector.branch(c);
innerInjector.invoke(inner);
}
var inner = ($, {a,b}, c) => {
console.log(a,b,c);
}
injector.invoke(main);
// {x:1} {y:2}
// {x:1} {y:2} {z:3}