fix(core): unable to inject viewProviders when host directive with providers is present #65778
+101
−31
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.
When registering providers, the DI system assumes that
viewProvidersare registered before plainproviders. This was reinforced by components always being first in the array of directive matches, only one component being allowed per node and the fact that only components can haveviewProviders.This breaks down if there are host directives with
providerson the component, because they'll execute earlier, throwing off the order of operations.These changes fix the issue by separating out the resolvers for
viewProvidersand plainprovidersand explicitly running the component'sviewProvidersresolver before any others. This also has the benefit of not attempting to resolveviewProvidersfor directives which are guaranteed not to have them.Fixes #65724.