mmlpx
Version:
mobx model layer paradigm
36 lines • 1.41 kB
JavaScript
/**
* @author Kuitos
* @homepage https://github.com/kuitos/
* @since 2017-09-13
*/
import initializeStore from './initializers/store';
import initializeViewModel from './initializers/viewModel';
import Injector from './Injector';
import { modelNameSymbol, modelTypeSymbol, storeSymbol, viewModelSymbol } from './meta';
var uid = 0;
var cachedInjector;
export function getInjector() {
return cachedInjector || (cachedInjector = Injector.newInstance());
}
export function setInjector(newInjector) {
cachedInjector = newInjector;
}
export default function instantiate(InjectedClass) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var injector = getInjector();
switch (InjectedClass[modelTypeSymbol]) {
case storeSymbol:
return initializeStore.call.apply(initializeStore, [this, injector, InjectedClass].concat(args));
case viewModelSymbol:
return initializeViewModel.call.apply(initializeViewModel, [this, injector, InjectedClass].concat(args));
default:
var name = InjectedClass[modelNameSymbol] = InjectedClass[modelNameSymbol] || (InjectedClass.name || '') + "_" + uid++;
return injector.get.apply(injector, [InjectedClass, {
scope: "singleton" /* Singleton */
, name: name
}].concat(args));
}
}