ioc-lite
Version:
IoC Container library which helps to keep inversion of control principle by using DI pattern for javascript/typescript projects
36 lines (28 loc) • 953 B
text/typescript
import { ClassType, ResolveDependency } from '../types';
export default class ClassResource {
private _resource;
private _resolveDependency;
private _dependencies: string[];
private _cache: unknown = null;
private _singleton: boolean;
constructor(resource: ClassType<unknown>, resolveDependency: ResolveDependency) {
this._resource = resource;
this._resolveDependency = resolveDependency;
this._dependencies = resource.$inject || [];
this._singleton = typeof(resource.$singleton) === 'boolean' ? resource.$singleton : false;
}
private _resolveDependencies() {
return this._dependencies.map(this._resolveDependency);
}
resolve() {
if (this._cache && this._singleton) {
return this._cache;
}
const dependencies = this._resolveDependencies();
const resource = new this._resource(...dependencies);
if (this._singleton) {
this._cache = resource;
}
return resource;
}
}