public constructor()

in lib/application.ts [133:197]


    public constructor(
        hostContext: ScopedObjectContext,
        settings: ApplicationSettings) {
        
        this._settings = settings;
        this._perAppObjectContext = new ScopedObjectContext(
            "./application",
            settings.baseDir,
            hostContext,
            settings.objectContextDef);

        // Create default execution stack.
        this._defaultExecutionStack = [];

        // Prepare default execution stack.
        for (let interceptorName of this._settings.defaultExecutionStack) {
            let interceptor = this.getInterceptor(interceptorName);
            if (interceptor == null) {
                throw new Error("Interceptor does not exisit: '" + interceptorName + "'.");
            }
            this._defaultExecutionStack.push(interceptor);
        }

        // Prepare per-entrypoint execution stack.
        this._perEntryPointExecutionStack = new Map<string, Interceptor[]>();
        this._perAppObjectContext.forEach(object => {
            if (object.def.value._type === 'EntryPoint') {
                let executionStack: Interceptor[] = this._defaultExecutionStack;
                let customStack = object.def.value.executionStack;
                
                // Entrypoint has specified executionStack.
                if (customStack != null) {
                    executionStack = [];
                    for (let interceptorName of <string[]>(customStack)) {
                        let interceptor = this.getInterceptor(interceptorName);
                        if (interceptor == null) {
                            throw new Error("Interceptor does not exist: '" + interceptorName + "'");
                        }
                        executionStack.push(interceptor);
                    }
                }
                this._perEntryPointExecutionStack.set(
                    object.def.name, 
                    executionStack);
            }
        });

        // Create default template.
        this._defaultRequestTemplate = new RequestTemplate(
            this.id,        // Use application id as fake template Uri.
            this,           // Application.
            undefined,      // No base template.
            {
                application: this.id,
                overrideTypes: [],
                overrideProviders: [],
                overrideObjects: []
            });

        // Create metrics.
        this._metrics = {};
        if (settings.metrics != null) {
            this._metrics = createMetricCollection(settings.metrics);
        }
    }