1.0.1 • Published 4 years ago
async-syringe v1.0.1
AsyncSyringe
Based on tsyringe but with support for async factories/init and does not use any global variables. I found this to be a problem when trying to inject from multiple modules.
Install use npm install --save @maca134/async-syringe
Example
import 'reflect-metadata';
import { Container, inject, injectable, singleton, injectAll } from '.';
@injectable()
export class SomeClass1 {
constructor() {
console.log('SomeClass1 constructor');
}
}
@injectable()
export class SomeClass2 {
constructor(
public someClass1: SomeClass1,
@injectAll('SomeNumber') public someNumbers: number[]
) {
console.log('SomeClass2 constructor');
}
}
@singleton<SomeClass3>({ initialize: instance => instance.init() })
export class SomeClass3 {
constructor(
public someClass1: SomeClass1,
public someClass2: SomeClass2,
@inject('SomeNumber') public someNumber: number
) {
console.log('SomeClass3 constructor');
}
async init() {
console.log('init start');
await new Promise(r => setTimeout(() => r(), 5000));
console.log('init end');
}
}
(async () => {
const container = new Container();
container.registerFactory('SomeNumber', _ => new Promise<number>(r => setTimeout(() => r(1), 1000)));
container.registerFactory('SomeNumber', _ => new Promise<number>(r => setTimeout(() => r(2), 1000)));
container.registerFactory('SomeNumber', _ => new Promise<number>(r => setTimeout(() => r(3), 1000)));
container.registerFactory('SomeNumber', _ => new Promise<number>(r => setTimeout(() => r(4), 1000)));
console.log(await container.resolveAll(SomeClass3));
})();
1.0.1
4 years ago