import { Service, ProviderClass, ServiceClass, Factory } from './provider'; import { InjectToken } from './inject-token'; /** * 依赖注入容器 * * 根据控制反转的概念: [Inversion of Control](https://en.wikipedia.org/wiki/Inversion_of_control) (IoC),Container 作为控制反转的容器,当你给容器提供一个 token 时,容器会自动的根据这个 token 值去注入对应的依赖,而这需要 `@inject` 和 `@injectable` 去生成 metadata。 */ export declare class Container { private providers; private providerClasses; private services; private graph; childContainers: Container[]; parent?: Container; constructor(parent?: Container); createChildContainer(): Container; getOrCreateProvider(fn: InjectToken): any; create(fn: InjectToken, parent?: InjectToken): any; /** * 为该容器注册一个 Service Class,它的依赖会被自动解决,inject-js 也会创建它的实例注入给别人。 */ addService(Svc: ServiceClass): void; /** * 为该容器注册一个 Factory,即可以返回 Service 实例的函数。 */ addFactory(token: InjectToken, f: Factory, deps: InjectToken[]): void; /** * 为该容器注册一个具体的值。可以是一个类的实例,也可以是基本类型。通常标识容器的一些配置。 */ addValue(token: InjectToken, value: T): void; /** * 为该容器注册一个 provider,每个 provider 需要提供 create 初始化方法,返回该 provider 注入的依赖。 */ addProvider(token: InjectToken, P: ProviderClass): void; getTokens(): InjectToken[]; getServices(): Service[]; /** * 销毁容器,以及容器里的所有 service,并调用所有 service 的 `destroy()` 方法(如果存在定义的话)。inject-js 会去分析已创建的所有 Service 实例,按照依赖的拓扑顺序,逆序小伙。如:A 依赖 B,B 依赖 C,则按照 A => B => C 的顺序依次调用它们的 destroy 方法。 */ destroy(): void; }