mmlpx
Version:
mobx model layer paradigm
57 lines (47 loc) • 1.79 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getInjector = getInjector;
exports.setInjector = setInjector;
exports.default = instantiate;
var _store = require('./initializers/store');
var _store2 = _interopRequireDefault(_store);
var _viewModel = require('./initializers/viewModel');
var _viewModel2 = _interopRequireDefault(_viewModel);
var _Injector = require('./Injector');
var _Injector2 = _interopRequireDefault(_Injector);
var _meta = require('./meta');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @author Kuitos
* @homepage https://github.com/kuitos/
* @since 2017-09-13
*/
var uid = 0;
var cachedInjector;
function getInjector() {
return cachedInjector || (cachedInjector = _Injector2.default.newInstance());
}
function setInjector(newInjector) {
cachedInjector = newInjector;
}
function instantiate(InjectedClass) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var injector = getInjector();
switch (InjectedClass[_meta.modelTypeSymbol]) {
case _meta.storeSymbol:
return _store2.default.call.apply(_store2.default, [this, injector, InjectedClass].concat(args));
case _meta.viewModelSymbol:
return _viewModel2.default.call.apply(_viewModel2.default, [this, injector, InjectedClass].concat(args));
default:
var name = InjectedClass[_meta.modelNameSymbol] = InjectedClass[_meta.modelNameSymbol] || (InjectedClass.name || '') + "_" + uid++;
return injector.get.apply(injector, [InjectedClass, {
scope: "singleton" /* Singleton */
, name: name
}].concat(args));
}
}
;