ComponentFactory should really be called ComponentTypeManager