inject - wrap your functions\classes where you want to inject parameters
// types.jsexportconstTYPE=Object.freeze({foo: 'FOO_SERVICE',bar: 'BAR_SERVICE',appConfig: 'APP_CONFIG',})// foo.jsimport{inject}from'jsdicon';import{TYPE}from'./types';exportconstfoo=inject(TYPE.appConfig)(functionfoo(appConfig){// do something with appConfig;returnsomeValue;})// bar.jsimport{inject}from'jsdicon';import{TYPE}from'./types';exportconstBar=inject(TYPE.foo,TYPE.appConfig)(classBar{constructor(foo,appConfig){foo;// value of foo function is now available here}startApp(){}// ... other properties and methods})
Container - create instance of Container
register - registers class.
registerValue - registers value.
registerFunc - registers function
resolve - resolve your type by typeId;
// index.jsimport{Container}from'jsdicon';import{TYPE}from'./types';import{foo}from'./foo';import{Bar}from'./bar';constcontainer=newContainer();container.register(TYPE.bar,Bar);container.registerFunc(TYPE.foo,foo);container.registerValue(TYPE.appConfig,{ENV: 'DEV',// ... other properties});constbar=container.resolve(TYPE.bar);bar.startApp();