import { Type, Token, Factory, SymbolType, Providers } from './types'; import { IMethodAccessor } from './IMethodAccessor'; import { LifeScope } from './LifeScope'; /** * container interface. * * @export * @interface IContainer */ export interface IContainer extends IMethodAccessor { /** * has register the token or not. * * @template T * @param {Token} token * @param {string} [alias] * @returns {boolean} * @memberof IContainer */ has(token: Token, alias?: string): boolean; /** * Retrieves an instance from the container based on the provided token. * * @template T * @param {Token} token * @param {string} [alias] * @returns {T} * @memberof IContainer */ get(token: Token, alias?: string): T; /** * resolve type instance with token and param provider. * * @template T * @param {Token} token * @param {...Providers[]} providers * @returns {T} * @memberof IContainer */ resolve(token: Token, ...providers: Providers[]): T; /** * clear cache. * * @param {Type} targetType * @memberof IContainer */ clearCache(targetType: Type): any; /** * get token. * * @template T * @param {SymbolType} target * @param {string} [alias] * @returns {Token} * @memberof IContainer */ getToken(target: SymbolType, alias?: string): Token; /** * get tocken key. * * @template T * @param {Token} token * @param {string} [alias] * @returns {SymbolType} * @memberof IContainer */ getTokenKey(token: Token, alias?: string): SymbolType; /** * get token implements class type. * * @template T * @param {Token} token * @returns {Type} * @memberof IContainer */ getTokenImpl(token: Token): Type; /** * register type. * * @template T * @param {Token} token * @param {Factory} [value] * @returns {this} * @memberof IContainer */ register(token: Token, value?: Factory): this; /** * unregister the token * * @template T * @param {Token} token * @returns {this} * @memberof IContainer */ unregister(token: Token): this; /** * bind provider * * @template T * @param {Token} provide * @param {Token | Factory} provider * @returns {this} * @memberof IContainer */ bindProvider(provide: Token, provider: Token | Factory): this; /** * register stingleton type. * * @template T * @param {Token} token * @param {Factory} value * * @memberOf IContainer */ registerSingleton(token: Token, value?: Factory): any; /** * get life scope of container. * * @returns {LifeScope} * @memberof IContainer */ getLifeScope(): LifeScope; }