@microphi/di
TypeScript icon, indicating that this package has built-in type declarations

2.10.0 • Public • Published

@microphi/di npm version

Yet another di container for javascript/typescript

install

npm i -S @microphi/di or yarn add @microphi/di

How to use

Decorate a class with @Injectable().

// my-class.ts


import { Injectable } from '@microphi/di';

@Injectable()
class MyClass {

  public sayHello(name: string) {
    return `Hello ${name}`;
  }
}

Inject it using @Inject(<Class>)

// consumer.ts

import { Inject } from '@microphi/di';

class Consumer {

  constructor(
    @Inject(MyClass) public myClassSingleton: MyClass
  ) {
    this.myClassSingleton.sayHello('consumer');
  }

}

Getting a singleton programmatically

// my-script.ts

const singleton = injector(MyClass);

Create the app

@DI({
  providers: [
    MyClass,
  ]
})
class App {
}

const app = bootstrap(App);

Providing custom implementation

providers array also accept an object such as:

@DI({
  providers: [
    {
      provide: MyClass,
      useClass: MyCustomImplementation,
    },
  ]
})
class App {
}

const app = bootstrap(App);

Testing

In order to test a singleton and mock dependencies use TestBed

import { Inject } from '@microphi/di';


describe('MyClass', () => {

  @Injectable()
  class HttpService {
  }

  @Injectable()
  class TestClass {
    constructor(
      @Inject(HttpService) http: HttpService,
    ) {
    }
  }

  let instance;

  beforeEach(() => {
    TestBed.configure({
      providers: [
        TestClass,
        {
          provide: HttpService,
          useClass: class {
            // test implementation
          }
        }
      ]
    });

    instance = TestBed.inject(TestClass);
  });

  it('should exist', () => {
    expect(instance).toBeTruthy();
  });
});

Mocked

Only if jest is used the Mocked utility can be used to automatically mock any given class.

import { Inject } from '@microphi/di';


describe('MyClass', () => {

  @Injectable()
  class HttpService {
  }

  @Injectable()
  class TestClass {
    constructor(
      @Inject(HttpService) http: HttpService,
    ) {
    }
  }

  let instance;

  beforeEach(() => {
    TestBed.configure({
      providers: [
        TestClass,
        {
          provide: HttpService,
          useClass: Mocked(HttpService)
        }
      ]
    });

    instance = TestBed.inject(TestClass);
  });

  it('should exist', () => {
    expect(instance).toBeTruthy();
  });
});

for more info look at its tests

DEBUG

Prepend DEBUG=microgamma:digator* to your script to see debugging information.

Package Sidebar

Install

npm i @microphi/di

Weekly Downloads

44

Version

2.10.0

License

MIT

Unpacked Size

130 kB

Total Files

89

Last publish

Collaborators

  • davidecavaliere