0.1.7 • Published 7 years ago

typescript-injector-lite v0.1.7

Weekly downloads
2
License
MIT
Repository
github
Last release
7 years ago

Typescript-injector-lite

A light dependency injection framework utilizing typescript annotations.

  • No binding
  • No bootstrapping
  • Deferred dependency resolution and injection

Install

npm i typescript-injector-lite -save

tsconfig.json

Make sure that you include the following setting in your projects config

{
    "compilerOptions": {
        "experimentalDecorators": true,
        "emitDecoratorMetadata":true
        ...
    }
}

Service

A class annotated as a service will be injected as a singleton instance, and shared between all instances that require it.

import * as Injector from "typescript-injector-lite";

@Injector.service()
export class A {
    constructor(){}
}

Factory

A class annotated as a factory will be injected as a new instance every time it is require.

  • An optional alias lets you choose a second name to use to inject the class.
import * as Injector from "typescript-injector-lite";

@Injector.factory('my:B')
export class B {
    constructor(){}
}

Inject

Annotated classes can make use of constructor injecting using the inject annotation.

  • For class typed attributes the type name will be used by default to resolve the instance from the container
  • Else an explicit name can be used to resolve the instance.
import * as Injector from "typescript-injector-lite";

@Injector.service()
export class C {
    constructor(
        @Injector.inject() public a:A,
        @Injector.inject('my:B') public b,
    ){}
}

ImportValue

where there are non classical objects or external instances that you with to inject, you can make use of the importValue method to make the container aware of them.

Injector.importValue("myValue", [1,2,3]);

Instantiate

In cases where you want to retrieve an instance from the container without constructor injection, the instantiate method can be used.

Injector.instantiate("myValue");

Deferred Resolution

When a class is registered with the container, it will attempt to find all of is dependencies. If one or more dependencies are missing, the class will deffer is resolution and listen for the required class to be registered.

If there are no dependencies, or all of the required dependencies have been resolved, the registering class will build and instance itself in the container. Then call out to any listening classes who require it.

Debugging

To get an log of the registration and resolution process, run your app with the following environment variable enabled ´DEBUG=typescript-injector-light´

0.1.7

7 years ago

0.1.6

7 years ago

0.1.5

7 years ago

0.1.4

7 years ago

0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago