Why is it possible to provide an injection token of some type but can pass an actual value of a differing type and this be accepted in a service injected with the token?