1.0.8 • Published 5 years ago

di-resolver v1.0.8

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

Di-resolver

simple typescript runtime dependency injection which doesn't require reflect-metadata. Why we need this? If you have angular app, and want split your business logic apart from angular logic. You could use inversify or tsrynge, it would work to the moment when you run build aot. Angular compiler strips decorator metadata, and this Di frameworks doesn't work.

Decorators

  • @Provide([deps: Function[]]) creates every time new instance of class
  • @Singleton([deps: Function[]]) create instance of class at registration time
  • @LazySingleton([deps: Function[]]) create instance of class at injection moment

Example

@LazySingleton()
export class Dep3 {

}

@Singleton([Dep3])
export class Dep2 {

  constructor(private dep3: Dep3) {
  }
}

@Provide([Dep2])
export class Dep1 {

  constructor(private dep2: Dep2) {

  }
}

@Provide([Dep1, Dep2, Dep3])
export class Start {

  constructor(private dep1: Dep1, private dep2: Dep2, private dep3: Dep3) {
  }
}


const instance = DiResolver.resolve(Start);
console.log('instance', instance);

Example Test mock

@LazySingleton()
export class Dep3 {

}

@Singleton([Dep3])
export class Dep2 {

  constructor(private dep3: Dep3) {
  }
}

@Provide([Dep2])
export class Dep1 {

  constructor(private dep2: Dep2) {

  }
}

export class TestClass {

}

@Provide([Dep1, Dep2, Dep3])
export class Start {

  constructor(private dep1: Dep1, private dep2: Dep2, private dep3: Dep3) {
  }
}

const testClass = new TestClass();
const instance = DiResolver.resolveTesting(Start, [
  {
    provide: Dep1, useClass: testClass
  }
]);
console.log('instance', instance);
1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago