UNPKG

@e22m4u/js-service

Version:

Реализация принципа инверсии управления для JavaScript

106 lines (94 loc) 2.27 kB
import {Constructor} from './types.js'; /** * Find service predicate. */ export type FindServicePredicate<T extends object> = ( ctor: Constructor<T>, container: ServiceContainer, ) => boolean; /** * Service container. */ export declare class ServiceContainer { /** * Constructor. * * @param parent */ constructor(parent?: ServiceContainer); /** * Получить родительский сервис-контейнер или выбросить ошибку. */ getParent(): ServiceContainer; /** * Проверить наличие родительского сервис-контейнера. */ hasParent(): boolean; /** * Получить существующий или новый экземпляр. * * @param ctor * @param args */ get<T extends object>( ctor: Constructor<T>, ...args: any[], ): T; /** * Получить существующий или новый экземпляр, * только если конструктор зарегистрирован. * * @param ctor * @param args */ getRegistered<T extends object>( ctor: Constructor<T>, ...args: any[], ): T; /** * Проверить существование конструктора в контейнере. * * @param ctor */ has<T extends object>(ctor: Constructor<T>): boolean; /** * Добавить конструктор в контейнер. * * @param ctor * @param args */ add<T extends object>( ctor: Constructor<T>, ...args: any[], ): this; /** * Добавить конструктор и создать экземпляр. * * @param ctor * @param args */ use<T extends object>( ctor: Constructor<T>, ...args: any[], ): this; /** * Добавить конструктор и связанный экземпляр. * * @param ctor * @param service */ set<T extends object>( ctor: Constructor<T>, service: T, ): this; /** * Найти сервис удовлетворяющий условию. * * @param predicate * @param noParent */ find<T extends object>( predicate: FindServicePredicate<T>, noParent?: boolean, ): T | undefined; }