@emonkak/di

A dependency injection library for TypeScript

Usage no npm install needed!

<script type="module">
  import emonkakDi from 'https://cdn.skypack.dev/@emonkak/di';
</script>

README

@emonkak/di

Build Status Coverage Status

Example

import { Container, Inject, Named, Singleton, prototypeInjectionPolicy } from '@emonkak/di';

class IFoo {
    bar: IBar;
}

class IBar {
    baz: IBaz;
    qux: IQux;
    quux: any;
}

class IBaz {
    qux: IQux;
}

class IQux {}

@Inject
class Foo {
    constructor(public bar: IBar) {
    }
}

@Inject
class Bar {
    constructor(public baz: IBaz, public qux: IQux, @Named('quux') public quux: any) {
    }
}

@Inject
class Baz {
    constructor(public qux: IQux) {
    }
}

@Inject
@Singleton
class Qux {
    constructor() {
    }
}

const container = new Container(prototypeInjectionPolicy);
container.bind(IFoo).to(Foo);
container.bind(IBar).to(Bar);
container.bind(IBaz).to(Baz);
container.bind(IQux).to(Qux);
container.set('quux', 'quux');

const foo = container.get(Foo);

console.assert(foo instanceof Foo);
console.assert(foo.bar instanceof Bar);
console.assert(foo.bar.baz instanceof Baz);
console.assert(foo.bar.qux instanceof Qux);
console.assert(foo.bar.qux === foo.bar.baz.qux);
console.assert(foo.bar.quux === 'quux');