UNPKG

dino-core

Version:

A dependency injection framework for NodeJS applications

54 lines 2.23 kB
"use strict"; // Copyright 2018 Quirino Brizi [quirino.brizi@gmail.com] // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. Object.defineProperty(exports, "__esModule", { value: true }); exports.LazyLoadingResolver = void 0; class LazyLoadingResolver { /** * * @param {ApplicationContext} applicationContext * @param {ComponentDescriptor} componentDescriptor */ constructor(applicationContext, componentDescriptor) { this.applicationContext = applicationContext; this.componentDescriptor = componentDescriptor; this.targetRegistered = false; } get(_target, property, receiver) { if (['postConstruct', 'preDestroy'].includes(property)) { // no lifecycle to execute for a proxy... return; } return Reflect.get(this.loadInstanceIfRequired(), property, receiver); } /** * Ensure that the component instance is loaded before interacting with it. * As the component will be loaded from the application context it will therefore ensure that * its lifecycle is executed. * * @private */ loadInstanceIfRequired() { const name = `dinoConcreteInstanceForLazy_${this.componentDescriptor.getName()}`; if (this.targetRegistered) { // Here we resolve to make sure that if lifecycle is transient it is executed return this.applicationContext.resolve(name); } const answer = this.applicationContext.register(name, this.componentDescriptor); this.targetRegistered = true; return answer; } } exports.LazyLoadingResolver = LazyLoadingResolver; //# sourceMappingURL=LazyLoadingResolver.js.map