I've been trying to understand the difference between Inversify @tagged and @named bindings. I cannot seem to find any documentation which defines the difference between the two. They seem rather synonymous.
Additionally, when using the Container's autoBindInjectable setting, I am even more confused how/where to define an object's tag or name. There does not seem to be a way with the @injectable() annotation. What does the object get bound using as an identifier? Does it use the Class as the identifier?
I did see that the inversify-binding-decorators lib adds the @provide() and @fluentProvide().whenTargetTagged() decorators, but does that then eliminate the need for the @injectable() decorator altogether?
The docs indicate:
let container = new Container({ autoBindInjectable: true }); container.isBound(Ninja); // returns false container.get(Ninja); // returns a Ninja container.isBound(Ninja); // returns true
However, it does not show/indicate how to use the @injectable() annotation to allow for the autobind, other than just the generic docs:
@injectable()
class Ninja implements Warrior {}
But then how do you define @tagged or @named bindings? And is there a reason why to choose @tagged over @named? Or is the only way to use the inversify-binding-decorators lib?