/****************************************************************************** * Copyright 2021 TypeFox GmbH * This program and the accompanying materials are made available under the * terms of the MIT License, which is available in the project root. ******************************************************************************/ /** * A `Module` is a description of possibly grouped service factories. * * Given a type I = { group: { service: A } }, * Module := { group: { service: (injector: I) => A } } * * Making `I` available during the creation of `I` allows us to create cyclic * dependencies. */ export type Module = { [K in keyof T]: Module | ((injector: I) => T[K]); }; export declare namespace Module { const merge: (m1: Module, m2: Module) => Module; } /** * Given a set of modules, the inject function returns a lazily evaluated injector * that injects dependencies into the requested service when it is requested the * first time. Subsequent requests will return the same service. * * In the case of cyclic dependencies, an Error will be thrown. This can be fixed * by injecting a provider `() => T` instead of a `T`. * * Please note that the arguments may be objects or arrays. However, the result will * be an object. Using it with for..of will have no effect. * * @param module1 first Module * @param module2 (optional) second Module * @param module3 (optional) third Module * @param module4 (optional) fourth Module * @param module5 (optional) fifth Module * @param module6 (optional) sixth Module * @param module7 (optional) seventh Module * @param module8 (optional) eighth Module * @param module9 (optional) ninth Module * @returns a new object of type I */ export declare function inject(module1: Module, module2?: Module, module3?: Module, module4?: Module, module5?: Module, module6?: Module, module7?: Module, module8?: Module, module9?: Module): I; /** * Eagerly load all services in the given dependency injection container. This is sometimes * necessary because services can register event listeners in their constructors. */ export declare function eagerLoad(item: T): T; //# sourceMappingURL=dependency-injection.d.ts.map