easydeps
v1.2.3
Published
Easy Dependency Injection in multiple flavors (inspired by AMD and reflection)
Downloads
3
Maintainers
Readme
Easy Dependency Injection
Easy Dependency Injection in multiple flavors (inspired by AMD and reflection)
Usage
import in TypeScript
import ED from "easydeps";
import in JavaScript
const ED = require("easydeps").default;
get an instance
const ed = ED.getInstance("type"); // get a global instance so you can use dependencies in multiple modules
const ed = new ED(); // or instanciate a new instance within the current scope
register dependencies
ed.register("stuff", "Coffee");
ed.register({
service: (stuff) => "This is some great " + stuff + "!",
logger: (msg) => console.log(msg),
});
request dependencies
const [logger, service, stuff] = ed.request(["logger", "service", "stuff"]);
logger(service(stuff)); // "This is some great Pie!" // or whatever you want to do with the logger, the service and the stuff
const [loggerDep, stuffDep] = ed.requestRaw(["logger", "stuff"]); // the 'Raw' calls will return the Dependency containers
const logger = loggerDep.get(); // get the value from the Dependency container
stuffDep.onchange((newStuff, oldStuff) => { // attach an onchange event listener on the Dependency container. It will be invoked whenever the Dependency data changes
if (newStuff !== oldStuff) logger(newStuff); // execute the service when there is new data
});
resolve / invoke (reflection)
const stuffed = ed.resolve((service, stuff) => {
return service(stuff);
});
console.log(stuffed()); // "This is some great Coffee!"
ed.register({stuff: "Pie");
console.log(stuffed()); // "This is some great Pie!"
console.log(ed.invoke((service, stuff) => { // "This is some great Pie!" // or directly excecute the function with the injected dependencies
return service(stuff));
}));
resolve / invoke (AMD)
const stuffed = ed.resolveFrom(["service", "stuff"], (service, stuff, addition) => {
return service(addition + " " + stuff);
});
console.log(stuffed("chocolate")); // "This is some great chocolate Pie!" // with the AMD approach it is safe to use additional arguments
console.log(ed.invokeFrom(["service", "stuff"], ((service, stuff, addition) => { // "This is some great chocolate Pie!" // or directly excecute the function with the injected dependencies and additional arguments
return service(addition + " " + stuff);
}));