useClass with a class always creates a new independent instance managed by the container. useExisting resolves and returns the same singleton instance of the referenced token — no new instantiation occurs. Use useExisting when you need backward-compatible aliases without duplicating state.
useClass — when you want an independent instance with its own state.
useExisting — when you want two token names to point to the exact same runtime object.
useExisting is useful for maintaining backward-compatible tokens in evolving APIs.
useExisting requires the referenced token to already be registered in the same module or an imported module.