import { ActivationContext } from "./ActivationContext"; export interface Descriptor { activate(context: ActivationContext): T; } export type ServiceMap = { [k in keyof S]: Descriptor; }; export type ContainerKeys = keyof S | keyof ContainerProvided; export type TypeOfService = K extends keyof ContainerProvided ? ContainerProvided[K] : K extends keyof S ? S[K] : never; export type ContainerServiceMap = { [K in ContainerKeys]: Descriptor>; }; export type PartialServiceMap = { [k in keyof S]?: Descriptor; }; export interface ServiceLocator { resolve>(name: K, def?: TypeOfService): TypeOfService; } export interface ContainerProvided { container: ServiceLocator; } export type ContainerRegistered = /*{ [K in Exclude>]: S[K]; };*/ Exclude>; export type ActivationType = "singleton" | "container" | "hierarchy" | "context" | "call"; export interface ILifetimeManager { initialize(context: ActivationContext): ILifetime; } /** * Интерфейс для управления жизнью экземпляра объекта. Каждая регистрация имеет * свой собственный объект `ILifetime`, который создается при первой активации */ export interface ILifetime { /** Проверяет, что уже создан экземпляр объекта */ has(): boolean; get(): any; enter(): void; store(item: any, cleanup?: (item: any) => void): void; }