[dependency] should always give instance
[singleton] should always give singleton

Resolve singleton circular dependencies

make sure non singleton instances are inected correctly

Fix creating a singleton when instance already exist