import {StructureFactory} from "./../../../factories"; import {ParameteredStructure, BaseParameterStructure} from "./../../../structures"; import {BaseParameterDefinitionConstructor, BaseParameterDefinition} from "./../../../definitions"; import {ParameteredBinder} from "./../../base"; export interface StructureParameterBinderConstructor { new(factory: StructureFactory, structure: BaseParameterStructure): { bind(def: ParameterType): void; }; } export class StructureParameteredBinder extends ParameteredBinder { constructor( private readonly factory: StructureFactory, private readonly structure: ParameteredStructure, private readonly paramDefinition: BaseParameterDefinitionConstructor, private readonly paramBinder: StructureParameterBinderConstructor ) { super(); } getParameters() { return (this.structure.parameters || []).map(param => { const paramDefinition = new this.paramDefinition(); const paramBinder = new this.paramBinder(this.factory, param); paramBinder.bind(paramDefinition); return paramDefinition; }); } }