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.
38 lines
953 B
38 lines
953 B
import {Container} from './Container'
|
|
import {TypedDependencyKey} from './types'
|
|
|
|
/**
|
|
* Base class for Injection-aware classes that automatically
|
|
* pass along their configured container to instances created
|
|
* via their `make` method.
|
|
*/
|
|
export class InjectionAware {
|
|
private ci: Container
|
|
|
|
constructor() {
|
|
this.ci = Container.getContainer()
|
|
}
|
|
|
|
/** Set the container for this instance. */
|
|
public setContainer(ci: Container): this {
|
|
this.ci = ci
|
|
return this
|
|
}
|
|
|
|
/** Get the container for this instance. */
|
|
public getContainer(): Container {
|
|
return this.ci
|
|
}
|
|
|
|
/** Instantiate a new injectable using the container. */
|
|
public make<T>(target: TypedDependencyKey<T>, ...parameters: any[]): T {
|
|
const inst = this.ci.make<T>(target, ...parameters)
|
|
|
|
if ( inst instanceof InjectionAware ) {
|
|
inst.setContainer(this.ci)
|
|
}
|
|
|
|
return inst
|
|
}
|
|
}
|