ODIN
ODIN (On-demand Dependency InjectioN) is a Dependency Injection library inspired by Java CDI, enabling lazy loading pattern on JavaScript applications, providing every resource on-demand.
Dependency Injection (DI) is a technique used to reduce programmer's concern about objects creation and life-cycle. Delegating the management to DI, is possible to build a flexible coupling among resources and parts of the application.
When injecting a resource through the DI, it's only necessary think about how to use, neither about how it is provided or discarded - and well, that is why ODIN has born.
Besides of the lazy load, the resources are only instantiated when necessary. It means that even when a class is instantiated, not necessarily its dependencies were as well. By providing the dependencies at the last possible moment a lot of computational resource are saved, reducing the application requirements and extending the useful life time.
Another feature available is the possiblity to create a CustomProvider, customizing dependencies and the way that these ones are provided.
Dependencies
ODIN was built in Javascript, but uses decorators
- an Stage 2 proposal from tc39 - to create a better experience on providing dependencies.
Since that decorators
is not nativally supported by browsers or node, projects using ODIN will depends on babel and decorators pollifyl (legacy mode).
Installation
To use ODIN, execute:
$ npm i --save @odinjs/odin
Usage
To use ODIN is simple. Define a dependecy and inject it in another class. 🙃
import { Injectable, Singleton } from '@odinjs/odin';
@Singleton
class MyDependency {
sayHi() {
console.log(`Hi, I'm a potato!!`);
}
}
@Injectable
class AnotherDependency {
@Inject
myDependency;
doSomething() {
this.myDependency.sayHi();
}
}
To initialize the dependency injector, it's necessary to create a container - that will provide dependencies instances.
import odin from '@odinjs/odin';
const container = odin.container();
const intance = container.provide(AnotherDependency.name);
instance.doSomething();
To make the better use of ODIN, you could read our wiki.
Known issues
See issues.
Contributing
Please refer to our Contribution Guide for instructions on how to setup the development environment.
Contact / Getting help
Join us on our Slack channel.
License
MIT
Author
Thiago Teixeira thiago.teixeira@philips.com