Prepare for dynamic (string) dependency names.
Prepare for dynamic (string) dependency names.

The typed names used with Named are excellent in all respects but one: you can't take a name from a config file (or similar) and use it without a type-switch or otherwise complete knowledge of the name space.  This prevents different modules (say, from different compilation units) from contributing contending bindings for the same interface into the same injector and selecting one at runtime.  In guice this need is satisfied by MapBinders.

Given we're already using home-brewed TypeIds under the covers, it won't be hard to extend them (or a nearby type) with a string attribute.  It will take a default most of the time, including when a name type tag is used.  When a new, specific (but hidden) type tag is used, the string may vary.

First, add some busted (not compiling) tests.

phs/sauce,phs/sauce,phs/sauce,phs/sauce