Constructor selection based on @inject annotation, reformulated binding registration and circular dependency verification