@malagu/core
Version:
35 lines (28 loc) • 1.11 kB
text/typescript
import { Component, Autowired, Optional } from '../annotation';
import { ExpressionContextProvider, ContextInitializer, ExpressionContext } from './expression-protocol';
import { Prioritizeable } from '../utils';
import { ConfigUtil } from '../config';
export class ExpressionContextProviderImpl implements ExpressionContextProvider {
protected prioritized: ContextInitializer[];
protected ctx: ExpressionContext;
protected initialized = false;
constructor(
protected readonly contextInitializers: ContextInitializer[]
) {
this.ctx = ConfigUtil.getRaw();
}
provide(): ExpressionContext {
if (!this.prioritized) {
this.prioritized = Prioritizeable.prioritizeAllSync(this.contextInitializers).map(c => c.value);
}
if (!this.initialized) {
this.initialized = true;
for (const initializer of this.prioritized) {
initializer.initialize(this.ctx);
}
}
return this.ctx;
}
}