MediumPro challengeJavaScriptTypeScript

Dependency Injection Container

Node.jsDesign

Implement createContainer() with:

  • register(token, factory, { singleton }) — register a provider.

- singleton: true: factory called once; subsequent resolves return the cached value.
- singleton: false (default): factory called every time resolve is called.

  • resolve(token) — instantiate and return the value.

solve registers tokens backed by an auto-incrementing counter factory and
returns an array of resolved values. Singleton tokens return the same
counter value; transient tokens return a new one each time.

Sample tests

Test #1Singleton returns same value
Input: [[{"type":"register","token":"a","singleton":true},{"type":"resolve","token":"a"},{"type":"resolve","token":"a"}]]
Output: [1,1]
Test #2Transient creates new instance each time
Input: [[{"type":"register","token":"b","singleton":false},{"type":"resolve","token":"b"},{"type":"resolve","token":"b"}]]
Output: [1,2]
Test #3Single resolve
Input: [[{"type":"register","token":"x","singleton":true},{"type":"resolve","token":"x"}]]
Output: [1]
Test #4Mixed singleton and transient
Input: [[{"type":"register","token":"s","singleton":true},{"type":"register","token":"t","singleton":false},{"type":"resolve","token":"s"},{"type":"resolve","token":"t"},{"type":"resolve","token":"s"},{"type":"resolve","token":"t"}]]
Output: [1,2,1,3]