- added handling of circular reference
 - binding same type multiple times throws an exception