{"id":1190,"date":"2018-07-31T12:48:34","date_gmt":"2018-07-31T11:48:34","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=1190"},"modified":"2022-07-25T08:35:44","modified_gmt":"2022-07-25T07:35:44","slug":"javascript-port-resolver-dependency-injection","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/javascript-port-resolver-dependency-injection\/","title":{"rendered":"Javascript port resolver (dependency injection)"},"content":{"rendered":"<pre class=\"lang:js decode:true\">const getInstance = (fn) =&gt; {\r\n    let _instance = null;\r\n    return () =&gt; {\r\n        if (!_instance) {\r\n            _instance = fn();\r\n        }\r\n        return _instance;\r\n    };\r\n};\r\n\r\nclass PortResolver {\r\n    constructor() {\r\n        this._container = {};\r\n    }\r\n    register(name, fn) {\r\n        if (typeof name !== 'string') {\r\n            throw new Error('register expects a name string');\r\n        }\r\n        if (typeof fn !== 'function') {\r\n            throw new Error('register expects a function');\r\n        }\r\n        this._container[name] = fn;\r\n    }\r\n    registerInstance(name, fn) {\r\n        this.register(name, getInstance(fn));\r\n    }\r\n    resolve(name) {\r\n        let fn = this._container[name];\r\n        if (!fn) {\r\n            throw new Error('PortResolver can not resolve ' + name);\r\n        }\r\n        return fn();\r\n    }\r\n}\r\n\r\nmodule.exports = PortResolver;\r\n<\/pre>\n<pre class=\"lang:js decode:true\">const PortResolver = require('..\/adapters\/PortResolver');\r\nconst currentPortResolver = require('..\/domain\/currentPortResolver');\r\n\r\nclass Wiring {\r\n    apply() {\r\n        const portResolver = new PortResolver();\r\n        portResolver.register('number', () =&gt; 8);\r\n\r\n        currentPortResolver.setResolver(portResolver);\r\n    }\r\n}\r\n\r\nmodule.exports = Wiring;\r\n<\/pre>\n<pre class=\"lang:js decode:true \">class CurrentPortResolver {\r\n    constructor() {\r\n        this.resolver = null;\r\n    }\r\n    resolve(name) {\r\n        if (!this.resolver) {\r\n          throw new Error('CurrentPortResolver not set');\r\n        }\r\n        return this.resolver.resolve(name);\r\n    }\r\n    setResolver(resolver) {\r\n        this.resolver = resolver;\r\n    }\r\n}\r\nmodule.exports = new CurrentPortResolver();\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>const getInstance = (fn) =&gt; { let _instance = null; return () =&gt; { if (!_instance) { _instance = fn(); } return _instance; }; }; class PortResolver { constructor() { this._container = {}; } register(name, fn) { if (typeof name !== &#8216;string&#8217;) { throw new Error(&#8216;register expects a name string&#8217;); } if (typeof fn !== [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[5,4],"tags":[],"class_list":["post-1190","post","type-post","status-publish","format-standard","hentry","category-javascript","category-programming"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=1190"}],"version-history":[{"count":1,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1190\/revisions"}],"predecessor-version":[{"id":1191,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/1190\/revisions\/1191"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=1190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=1190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=1190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}