You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.0 KiB
44 lines
1.0 KiB
import {AbstractFactory} from './AbstractFactory'
|
|
import {DependencyKey, DependencyRequirement, PropertyDependency} from '../types'
|
|
import {Collection} from '../../util'
|
|
|
|
/**
|
|
* A factory whose token is produced by calling a function.
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* let i = 0
|
|
* const fact = new ClosureFactory('someName', () => {
|
|
* i += 1
|
|
* return i * 2
|
|
* })
|
|
*
|
|
* fact.produce([], []) // => 2
|
|
* fact.produce([], []) // => 4
|
|
* ```
|
|
*/
|
|
export class ClosureFactory<T> extends AbstractFactory<T> {
|
|
constructor(
|
|
protected readonly name: DependencyKey,
|
|
protected readonly token: () => T,
|
|
) {
|
|
super(token)
|
|
}
|
|
|
|
produce(): any {
|
|
return this.token()
|
|
}
|
|
|
|
match(something: unknown): boolean {
|
|
return something === this.name
|
|
}
|
|
|
|
getDependencyKeys(): Collection<DependencyRequirement> {
|
|
return new Collection<DependencyRequirement>()
|
|
}
|
|
|
|
getInjectedProperties(): Collection<PropertyDependency> {
|
|
return new Collection<PropertyDependency>()
|
|
}
|
|
}
|