easydeps
TypeScript icon, indicating that this package has built-in type declarations

1.2.3 • Public • Published

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);
}));

Package Sidebar

Install

npm i easydeps

Weekly Downloads

11

Version

1.2.3

License

ISC

Last publish

Collaborators

  • capnmarius