ezinjector
Small lightweight (~3kb minified) module for Inversion of Control (IoC Container) and Dependency Injection for JavaScript, EcmaScript and TypeScript.
$ npm install ezinjector --save
Use ts-ezinjector-compiler if using typescript for syntactic sugar, and interface intellisense: https://github.com/jeppeskovsen/ts-ezinjector-compiler
(examples will use that)
$ npm install ts-ezinjector-compiler --save-dev
Usage
It is not necessary to wrap the container inside a class, but this will make sure container.register
happens sooner.
import
Instantiate is an enum with 3 properties:
enum Instantiate
Getting the instance of the class without dependency injection:
import
Dependency Injection
There are two ways to inject into a class, that is registered in the container.
Via contructor
import
Via properties
import
@Resolve()
@Resolve
is a class decorator used to inject into a class where you don't control the instantiation of the class.
import
This class will inject whenever the class is newed up.
I've sat the default value to null in this case, because @Resolve
will overwrite constructor arguments, so we can just call the class like this:
new
But could also be:
new SomeModule;
Resolve also takes interfaces (up to 10 in the definition file), so we can use it like this:
import
Or with smart inject in ts-ezinjector-compiler, it will find out automatically:
import
@Inject() vs @StaticInject()
@StaticInject
will try to inject the property immediately, where @Inject
will inject when instance is created.
@StaticInject
only works for properties, and not constructor arguments.
@StaticInject
can for example be used in classes where you do not instatiate them yourself - like a React Component.
Without ts-ezinjector-compiler (magic strings)
Without the ts-ezinjector-compiler (or with JS/ES) we use magic strings to define our references:
@Inject;@StaticInject;@Resolve;container.register;Container.getInstance;