feat: Support full generic-type registrations #400
Closed
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.
Background
In Dart, generic type parameters are typically erased at runtime—two registrations like:
can be seen as the same
Type
, which causes collisions if you try to register both. By storing each registration under a string key (T.toString()
) instead ofType
, we preserve the full generic signature ("SomeGenericClass<Param1>"
vs."SomeGenericClass<Param2>"
) so that they remain distinct.Key Changes
String Keys in
_Scope
Previously,
_Scope
stored registrations in something like:Now, it is:
Lookups and insertions rely on
T.toString()
(or(type ?? T).toString()
) as the key.Lookups Use
T.toString()
In places like
_findFactoryByNameAndTypeOrNull
, we do:Instead of using:
Insertions Use
T.toString()
When registering:
Thus, each new instantiation of a generic class is stored under its unique string representation.
Minimal Structural Impact
typeRegistrations
switched fromType
toString
.Benefits
Multiple Generic Registrations
You can now do:
without conflicts. They each go under a separate key:
"SomeGenericClass<A>"
"SomeGenericClass<B>"
No API Breakage
getIt<T>()
orregister*<T>()
work as before.get_it
maintains its map of registrations.