[rc2] Fix MissingMethodException when abstract IDesignTimeServices classes are discovered #36606
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.
Fixes #34617
Description
The EF Core design-time services discovery mechanism was attempting to instantiate abstract classes implementing
IDesignTimeServices
, which resulted in aMissingMethodException
when running commands likedotnet ef migrations add
.Customer impact
All types implemented
IDesignTimeServices
have to be made instantiable as a work-around.How found
Customer reported on 8.0.8
Regression
No
Testing
Tests added
Risk
Low. The fix is very localized.
Example scenario that failed before this fix:
Running
dotnet ef migrations add
would throw:Fix
Modified the type discovery filter to use
IsInstantiable()
instead of checking only!IsAbstract
:The
IsInstantiable()
extension method provides comprehensive filtering by excluding:This change:
GetConstructibleTypes()
DesignTimeServicesReferenceAttribute
are unchanged!IsAbstract
Testing
Added comprehensive tests covering:
IDesignTimeServices
All existing tests continue to pass, confirming no regressions in the design-time services functionality.