Skip to content

Conversation

Blacksmoke16
Copy link
Member

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

  • Breaking: Require services to be explicitly aliased

@Blacksmoke16 Blacksmoke16 enabled auto-merge (squash) May 4, 2024 00:14
@Blacksmoke16 Blacksmoke16 merged commit 94bf4e0 into master May 4, 2024
@Blacksmoke16 Blacksmoke16 deleted the un-aliased-interfaces branch May 4, 2024 00:17
PallasAthenaie pushed a commit to athena-framework/dependency-injection that referenced this pull request May 4, 2024
…thena-framework/athena#408)

* Ensure un-aliased singly implemented interfaces are not resolved automatically
* Ensure `framework` component explicitly aliases interfaces
PallasAthenaie pushed a commit to athena-framework/framework that referenced this pull request May 4, 2024
…thena-framework/athena#408)

* Ensure un-aliased singly implemented interfaces are not resolved automatically
* Ensure `framework` component explicitly aliases interfaces
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging this pull request may close these issues.

1 participant