I find this way better than optional parameters. asValue, asType, asFactory would be more intuitive for me. 
I think I like this even better:
* bindValue(type)
* bindType(type)
* bindFactory(type)