const getInstance = (fn) => { let _instance = null; return () => { if (!_instance) { _instance = fn(); } return _instance; }; }; class PortResolver { constructor() { this._container = {}; } register(name, fn) { if (typeof name !== 'string') { throw new Error('register expects a name string'); } if (typeof fn !== 'function') { throw new Error('register expects a function'); } this._container[name] = fn; } registerInstance(name, fn) { this.register(name, getInstance(fn)); } resolve(name) { let fn = this._container[name]; if (!fn) { throw new Error('PortResolver can not resolve ' + name); } return fn(); } } module.exports = PortResolver;
const PortResolver = require('../adapters/PortResolver'); const currentPortResolver = require('../domain/currentPortResolver'); class Wiring { apply() { const portResolver = new PortResolver(); portResolver.register('number', () => 8); currentPortResolver.setResolver(portResolver); } } module.exports = Wiring;
class CurrentPortResolver { constructor() { this.resolver = null; } resolve(name) { if (!this.resolver) { throw new Error('CurrentPortResolver not set'); } return this.resolver.resolve(name); } setResolver(resolver) { this.resolver = resolver; } } module.exports = new CurrentPortResolver();
119000cookie-checkJavascript port resolver (dependency injection)