InversifyJS
InversifyJS copied to clipboard
getNamed returns all identified items
If I add whenTargetNamed only to one ServiceIdentifier, then getNamed and getAllNamed work incorrectly.
bind('serviceId').to(somethingXXX).whenTargetNamed('serviceName');
bind('serviceId').to(somethingYYY);
Expected Behavior
container.getNamed('serviceId', 'serviceName'); // returns - somethingXXX
container.getAllNamed('serviceId', 'serviceName'); // returns - [somethingXXX]
Current Behavior
container.getNamed('serviceId', 'serviceName'); // Ambiguous match found for serviceIdentifier: serviceId
container.getAllNamed('serviceId', 'serviceName'); // [somethingXXX, somethingYYY]
Context
I need to receive either all items with serviceId or someone specific(serviceName).
Current behaviour confuses me.
- Is it wot correctly?
- can I set some additional identifier to item?
BTW isBoundNamed works correctly as expected.
container.isBoundNamed('serviceId', 'serviceName')
Your Environment
Inversify 5.0.1 Chrome 95
You need to add .whenTargetIsDefault() to your un-named bind when using named bindings:
> c.bind("1").toConstantValue("1").whenTargetNamed("numeric")
> c.bind("1").toConstantValue("one").whenTargetIsDefault()
> c.get("1")
'one'
> c.getNamed("1", "numeric")
'1'
> c.getAllNamed("1", "numeric")
[ '1' ]