An object containing all the available sub-types constructions of the managed by this class.
Should always have a 'basic' field for the default construction operation.
Defines default construction logic for the managed object.
For example if we have a
FooProvider, this method will be something like:
return new Foo();
It is abstract and must be overridden by the extenders, or an Error will be thrown.
An isntance of the managed class of objects.