MediumPro challengePython

Dependency Injection Container

PythonDesignDI

Implement create_container() returning a dict with:

  • register(token, factory, singleton=False) — 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 a list of resolved values. Singleton tokens return the same
counter value; transient tokens return a new one each time.

Sample tests

Test #1Singleton returns the same value
Input: [[{"type":"register","token":"a","singleton":true},{"type":"resolve","token":"a"},{"type":"resolve","token":"a"}]]
Output: [1,1]
Test #2Transient creates a new instance each time
Input: [[{"type":"register","token":"b","singleton":false},{"type":"resolve","token":"b"},{"type":"resolve","token":"b"}]]
Output: [1,2]
Test #3Mixed 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]
Test #4Single resolve
Input: [[{"type":"register","token":"x","singleton":true},{"type":"resolve","token":"x"}]]
Output: [1]