component registry allows polymorphic registration