Fix wrong interface type returned for service regiatration #21
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Reality Collective - Reality Toolkit Pull Request
Overview
TypeExtensions.FindServiceInterfaceType returns the wrong interface type for a data provider when there is a more concrete type. This is actually the issue I was reporting the other day. So following scenario, here is the interface hierarchy for the toolkit's teleport providers:
IDashTeleportProvider -> ITeleportLocomotionProvider -> ILocomotionProvider
IBlinkTeleportProvider -> ITeleportLocomotionProvider -> ILocomotionProvider
IInstantTeleportProvider -> ITeleportLocomotionProvider -> ILocomotionProvider
Upon service registration TypeExtensions.FindServiceInterfaceType currently returns ITeleportLocomotionProvider for all three of them, which obbviously leads to issues as the service container will only register the first one and then fail to register the others since a type of that interface is already registered.
This is because Tyle.GetInterfaces() returns interfaces in an arbitrary order
And then whatever is the first one in the returned array that works for the service is seledcted
Which might not be the best suited candidate
Manual testing status
Manually tested.