UNPKG

inversify-inject-decorators

Version:

Lazy evaluated property injection decorators for InversifyJS

65 lines (64 loc) 2.24 kB
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); }; }; } 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); }; }; } 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); }; }; } function makePropertyMultiInjectDecorator(container, doCache) { return function (serviceIdentifier) { return function (proto, key) { var resolve = function () { return container.getAll(serviceIdentifier); }; _proxyGetter(proto, key, resolve, doCache); }; }; } export { makePropertyInjectDecorator, makePropertyMultiInjectDecorator, makePropertyInjectTaggedDecorator, makePropertyInjectNamedDecorator };