lib/instantiators/di/constructor.js
var debug = require('debug')('maglev:di');
module.exports = function(container) {
if (!container) {
try {
container = require('electrolyte');
} catch (_) {
try {
// workaround when `npm link`'ed for development
var prequire = require('parent-require');
container = prequire('electrolyte');
} catch (_) {}
}
}
return function(Mod) {
if (!container) { return; }
if (typeof Mod != 'function') { return; }
var name = Mod.name || 'anonymous';
if (name[0] != name[0].toUpperCase()) { return; }
var deps = Mod['@require'] || []
, args = [];
for (var i = 0, len = deps.length; i < len; ++i) {
debug('create %s', deps[i]);
var inst = container.create(deps[i], this);
args.push(inst);
}
switch (args.length) {
case 0: return new Mod();
case 1: return new Mod(args[0]);
case 2: return new Mod(args[0], args[1]);
case 3: return new Mod(args[0], args[1], args[2]);
case 4: return new Mod(args[0], args[1], args[2], args[3]);
case 5: return new Mod(args[0], args[1], args[2], args[3], args[4]);
case 6: return new Mod(args[0], args[1], args[2], args[3], args[4], args[5]);
case 7: return new Mod(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
case 8: return new Mod(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
case 9: return new Mod(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
case 10: return new Mod(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
}
throw new Error('Constructor for component "' + this.id + '" requires too many arguments');
};
};