we discussed this offline, but posting here for posterity:
Provider is publicly exposed via NoProviderError and Module.bindings, which is a map from int to Provider.  it's also tedious to try to explain most of this di design without this concept.  e.g. an injector binds a key to a ... what?  not an instance.

it is an admirable goal to see if one can hide this concept, but i think it would require a substantial redesign.  if that happens, just alter the docs at that point.