UNPKG

inversify-inject-decorators

Version:

Lazy evaluated property injection decorators for InversifyJS

72 lines (71 loc) 2.82 kB
define(["require", "exports"], function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var INJECTION = Symbol.for("INJECTION"); function _proxyGetter(proto, key, resolve, doCache) { function getter() { if (doCache && !Reflect.hasMetadata(INJECTION, this, key)) { Reflect.defineMetadata(INJECTION, resolve(), this, key); } if (Reflect.hasMetadata(INJECTION, this, key)) { return Reflect.getMetadata(INJECTION, this, key); } else { return resolve(); } } function setter(newVal) { Reflect.defineMetadata(INJECTION, newVal, this, key); } Object.defineProperty(proto, key, { configurable: true, enumerable: true, get: getter, set: setter }); } function makePropertyInjectDecorator(container, doCache) { return function (serviceIdentifier) { return function (proto, key) { var resolve = function () { return container.get(serviceIdentifier); }; _proxyGetter(proto, key, resolve, doCache); }; }; } exports.makePropertyInjectDecorator = makePropertyInjectDecorator; function makePropertyInjectNamedDecorator(container, doCache) { return function (serviceIdentifier, named) { return function (proto, key) { var resolve = function () { return container.getNamed(serviceIdentifier, named); }; _proxyGetter(proto, key, resolve, doCache); }; }; } exports.makePropertyInjectNamedDecorator = makePropertyInjectNamedDecorator; function makePropertyInjectTaggedDecorator(container, doCache) { return function (serviceIdentifier, key, value) { return function (proto, propertyName) { var resolve = function () { return container.getTagged(serviceIdentifier, key, value); }; _proxyGetter(proto, propertyName, resolve, doCache); }; }; } exports.makePropertyInjectTaggedDecorator = makePropertyInjectTaggedDecorator; function makePropertyMultiInjectDecorator(container, doCache) { return function (serviceIdentifier) { return function (proto, key) { var resolve = function () { return container.getAll(serviceIdentifier); }; _proxyGetter(proto, key, resolve, doCache); }; }; } exports.makePropertyMultiInjectDecorator = makePropertyMultiInjectDecorator; });