1.0.0 • Published 7 years ago

@msiviero/knit-di v1.0.0

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

Typescript lightweight dependency injection container

Installation

yarn add @msiviero/knit-di

Example of usage

Base usage is simple as:

import { Container, component } from "@msiviero/knit-di";

@component()
class EmailService {
  public sendEmail(recipient: string) {
    // omitted
  }
}

@component()
class MyApplication {

  constructor(private readonly emailService: EmailService) { }

  public run() {
    this.emailService.sendEmail("example@gmail.com");
  }
}

const app = Container.getInstance().resolve(MyApplication);

app.run();

Note that all instances all singleton by default

Injection scope

Pass desired scope as decorator parameter

@component(Scope.Prototype)
class EmailService {
  public sendEmail(recipient: string) {
    // omitted
  }
}

Register custom provider

const container = Container.getInstance();

class EmailService {
  public sendEmail(recipient: string) {
    // omitted
  }
}

container.provide(EmailService, () => new EmailService());

@component()
class MyApplication {
  constructor(public readonly emailService: EmailService) { }
}

Register interface provider

const container = Container.getInstance();

interface EmailService {
  sendEmail: (recipient: string) => void;
}

container.provide("EmailService", () => ({
  sendEmail: (recipient: string) => {
    // omitted
  }
}));

@component()
class MyApplication {
  constructor(@inject("EmailService") public readonly emailService: EmailService) { }
}