athena-framework / athena

An ecosystem of reusable, independent components
https://athenaframework.org
MIT License
211 stars 17 forks source link

Be more strict when it comes to resolving interface based services #408

Closed Blacksmoke16 closed 4 months ago

Blacksmoke16 commented 5 months ago

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