When auto wiring service dependencies, if there was only one service that is compatible with a parameter's type restriction, that service would be used. This PR makes this logic a bit more strict by not doing this if the parameter's type restriction is a module, i.e. an interface.
The reasoning for this change is to prevent the surprise error when you define an interface with a single default implementation. When a parameter was typed as this interface, things would work fine. However, if another implementation of that interface was introduced, you would now have an error.
This change forces you to explicitly alias the default implementation, which can most likely be accomplished by simply annotating the default service with @[ADI::AsAlias].
Changes
Breaking: Require services to be explicitly aliased
Context
When auto wiring service dependencies, if there was only one service that is compatible with a parameter's type restriction, that service would be used. This PR makes this logic a bit more strict by not doing this if the parameter's type restriction is a module, i.e. an interface.
The reasoning for this change is to prevent the surprise error when you define an interface with a single default implementation. When a parameter was typed as this interface, things would work fine. However, if another implementation of that interface was introduced, you would now have an error.
This change forces you to explicitly alias the default implementation, which can most likely be accomplished by simply annotating the default service with
@[ADI::AsAlias]
.Changes