Currently there is no way for objects registered in the provider to dispose itself. Only ProviderModule have capabilities to dispose itself. This can be a problem when objects are supposed to be initialized lazily, users will be forced to call get(Clazz) to get the value and dispose manually without knowing if the object has been initialized or not.
Special case for registerFactory if an object is produced by factory and is disposable, then should dispose previous object instantiated by this factory before returning new instance, else return the instance as usual.
Nested provider is a provider that has a parent provider. Any registration to nested provider should be registered in its own scope. If provider.get(Clazz) or other type of get doesn't have value in its own scope, the nested provider will try to get(Clazz) from the parent provider.
This is useful especially in android where it has Application, Activity, and Fragment lifecycle/scope where provider in Fragment scope will have parent provider from Activity provider and Activity will have Application provider as parent provider. This will allow chaining get from Fragment scope upwards until Application scope where global singleton components normally live in Application scope.
If Nested provider is disposed it will dispose its own registered components, the parent provider will NOT be disposed.