diff --git a/lib/get_it_impl.dart b/lib/get_it_impl.dart index a12ab64..c617d27 100644 --- a/lib/get_it_impl.dart +++ b/lib/get_it_impl.dart @@ -1289,16 +1289,16 @@ class _GetItImplementation implements GetIt { ), ); + final typeRegistration = factoryToRemove.registeredIn; + if (instanceName != null) { - factoryToRemove.registeredIn.namedFactories.remove(instanceName); + typeRegistration.namedFactories.remove(instanceName); } else { - final factories = factoryToRemove.registeredIn.factories; - if (factories.contains(factoryToRemove)) { - factories.remove(factoryToRemove); - if (factories.isEmpty) { - factoryToRemove.registrationScope.typeRegistrations.remove(T); - } - } + typeRegistration.factories.remove(factoryToRemove); + } + if (typeRegistration.namedFactories.isEmpty && + typeRegistration.factories.isEmpty) { + factoryToRemove.registrationScope.typeRegistrations.remove(T); } if (factoryToRemove.instance != null) { diff --git a/test/unregister_test.dart b/test/unregister_test.dart new file mode 100644 index 0000000..2b6e138 --- /dev/null +++ b/test/unregister_test.dart @@ -0,0 +1,24 @@ +import 'package:get_it/get_it.dart'; +import 'package:test/test.dart'; + +class Service extends Object {} + +class Service2 extends Service {} + +void main() { + test('Unregisters only instance with type and keep named instance ', () { + final locator = GetIt.asNewInstance(); + locator.reset(); + + locator.registerLazySingleton(() => Service()); + locator.registerLazySingleton(() => Service2(), instanceName: '2'); + + expect(locator(), isA()); + expect(locator(instanceName: '2'), isA()); + + locator.unregister(); + + expect(() => locator(), throwsStateError); + expect(locator(instanceName: '2'), isA()); + }); +}