Version: 0.1.00.1.10.2.00.2.10.2.20.2.30.2.40.3.00.4.00.5.00.5.10.5.20.5.30.6.00.6.10.7.00.8.00.8.10.9.00.10.00.10.10.11.00.11.10.11.20.11.30.11.40.11.50.11.60.11.70.11.80.11.90.11.100.11.110.12.00.12.10.12.20.12.30.12.40.12.50.12.60.12.70.12.80.12.90.12.100.12.110.12.120.12.130.13.00.13.10.13.21.0.01.0.11.1.01.2.01.3.01.4.01.4.11.5.01.5.11.6.01.7.01.8.01.8.11.9.01.10.01.11.01.12.01.12.11.13.01.14.01.15.01.16.01.17.01.17.11.18.01.19.01.19.11.20.01.20.11.20.21.20.31.21.01.21.11.21.31.21.41.22.01.22.11.23.01.23.11.23.21.23.31.23.41.23.51.24.01.25.01.25.12.0.02.1.02.1.13.0.03.1.03.2.03.3.03.4.03.5.03.5.13.6.03.7.03.8.03.8.13.8.23.9.03.9.13.9.23.9.33.9.43.10.03.10.13.11.03.11.13.12.03.13.03.13.13.13.23.14.03.14.13.15.03.15.13.16.03.17.03.17.13.17.23.18.04.0.0-alpha.14.0.0-alpha.24.0.0-alpha.34.0.0-alpha.44.0.0-alpha.54.0.0-alpha.64.0.0-alpha.74.0.0-alpha.84.0.0-alpha.94.0.0-alpha.104.0.0-alpha.114.0.0-alpha.124.0.0-alpha.134.0.0-alpha.144.0.0-alpha.154.0.0-alpha.164.0.0-alpha.174.0.0-alpha.184.0.0-alpha.194.0.0-alpha.204.0.0-alpha.214.0.0-alpha.224.0.0-alpha.234.0.0-alpha.244.0.0-alpha.254.0.0-alpha.264.0.0-alpha.274.0.0-alpha.284.0.0-alpha.294.0.0-alpha.304.0.0-alpha.314.0.0-alpha.324.0.04.0.14.1.04.1.14.1.25.0.05.0.15.0.25.0.35.0.45.0.55.0.65.0.75.0.85.0.95.0.106.0.06.1.06.1.16.1.26.1.36.1.46.1.57.0.07.0.17.0.27.0.37.0.47.0.57.0.67.0.77.0.8
import { ValueOrPromise } from './value-promise';
/**
* Providers allow developers to compute injected values dynamically,
* with any dependencies required by the value getter injected automatically
* from the Context.
*
* @example
* ```ts
* export class DateProvider implements Provider<Date> {
* constructor(@inject('stringDate') private param: String){}
* value(): Date {
* return new Date(param);
* }
* ctx.bind('stringDate').to('2017-01-01')
* ctx.bind('provider_key').toProvider(DateProvider);
* const value = ctx.getAsync('provider_key');
* // value is a Date instance
* ```
*/
export interface Provider<T> {
* @returns The value to inject to dependents.
* This method can return a promise too, in which case the IoC framework
* will resolve this promise to obtain the value to inject.
value(): ValueOrPromise<T>;
}