public virtual PropertyInfo[] GetSignatureProperties()
{
Type type = GetTypeUnproxied();
// Since data won't be in cache on first request only, use .GetOrAdd as second attempt to prevent allocation of extra lambda object.
TypePropertyDescriptor descriptor = signaturePropertiesCache.Find(type) ?? GetOrAdd(type);
return descriptor.Properties;
}