public string RegisterType(Type type)
{
if (type == null) throw new ArgumentNullException(nameof(type));
var name = Type2NameRegistry.FindNameByType(type);
if (name != null) return name;
name = type.Name;
if (type.IsInterface && name.StartsWith("I", StringComparison.Ordinal)) name = name.Substring(1);
return RegisterType(type, name);
}