inversify-inject-decorators
Version:
Lazy evaluated property injection decorators for InversifyJS
72 lines (71 loc) • 2.82 kB
JavaScript
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;
});