@ccms/container
Version:
MiaoScript container package
67 lines • 2.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.lazyMultiInject = exports.lazyInjectTagged = exports.lazyInjectNamed = exports.lazyInject = exports.ContainerInstance = exports.getContainer = exports.initContainer = void 0;
var inversify_1 = require("inversify");
var utils_1 = require("./utils");
var _container;
var ContainerInstance = Symbol.for("@ccms/ioc:Container");
exports.ContainerInstance = ContainerInstance;
function initContainer(container) {
Reflect.defineMetadata(ContainerInstance, container, Reflect);
return _container = container;
}
exports.initContainer = initContainer;
function getContainer() {
return _container || initContainer(new inversify_1.Container());
}
exports.getContainer = getContainer;
function makePropertyInjectDecorator(doCache) {
return function (serviceIdentifier) {
return function (proto, key) {
var resolve = function () {
return getContainer().get(serviceIdentifier);
};
(0, utils_1._proxyGetter)(proto, key, resolve, doCache);
};
};
}
function makePropertyInjectNamedDecorator(doCache) {
return function (serviceIdentifier, named) {
return function (proto, key) {
var resolve = function () {
return getContainer().getNamed(serviceIdentifier, named);
};
(0, utils_1._proxyGetter)(proto, key, resolve, doCache);
};
};
}
function makePropertyInjectTaggedDecorator(doCache) {
return function (serviceIdentifier, key, value) {
return function (proto, propertyName) {
var resolve = function () {
return getContainer().getTagged(serviceIdentifier, key, value);
};
(0, utils_1._proxyGetter)(proto, propertyName, resolve, doCache);
};
};
}
function makePropertyMultiInjectDecorator(doCache) {
return function (serviceIdentifier) {
return function (proto, key) {
var resolve = function () {
return getContainer().getAll(serviceIdentifier);
};
(0, utils_1._proxyGetter)(proto, key, resolve, doCache);
};
};
}
var doCache = true;
var lazyInject = makePropertyInjectDecorator(doCache);
exports.lazyInject = lazyInject;
var lazyInjectNamed = makePropertyInjectNamedDecorator(doCache);
exports.lazyInjectNamed = lazyInjectNamed;
var lazyInjectTagged = makePropertyInjectTaggedDecorator(doCache);
exports.lazyInjectTagged = lazyInjectTagged;
var lazyMultiInject = makePropertyMultiInjectDecorator(doCache);
exports.lazyMultiInject = lazyMultiInject;
//# sourceMappingURL=decorators.js.map