Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 12x 12x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x | import { IFactoryResultDefinition } from "./definitionInterfaces/IFactoryResultDefinition"; import { IInstantiatable } from "../interfaces/IInstantiatable"; import { Container } from "../Container"; import { ArgResolver } from "./helpers/ArgResolver"; export class FactoryResultInstantiation implements IInstantiatable { tags: string[] = []; definition: IFactoryResultDefinition; argResolver: ArgResolver; constructor(definition: IFactoryResultDefinition, private readonly container: Container) { this.definition = definition; this.argResolver = new ArgResolver(this.container); } async instantiate() { return this.getFactoryResult(this.definition); } public async getFactoryResult<T>(factoryResultDefinition: IFactoryResultDefinition): Promise<T> { Iif (factoryResultDefinition.factoryKey === undefined) throw new Error(`cannot resolve ${factoryResultDefinition.key} as factory because do not have factoryKey`); const factoryDefinition: any = this.container.definitionsRepository.getDefinition(factoryResultDefinition.factoryKey).definition; const factoryObj = await this.container.resolve(factoryResultDefinition.factoryKey) as any; Iif (!factoryDefinition?.factoryFn) factoryDefinition.factoryFn = "create"; const meta = Reflect.getMetadata(factoryDefinition.factoryFn, factoryDefinition.content) || {}; const factoryFnArgs: any = await this.argResolver.resolveArguments(meta, factoryResultDefinition.factoryMethodContext, factoryDefinition.factoryFn); const result = factoryObj[factoryDefinition.factoryFn](...factoryFnArgs); return result as T; } } |