void EnsureProperties() { if (_scanProperties) { return; } _scanProperties = true; var items = ReflectGetProperties(SourceClrType) .Select(t => new ReflectedPropertyDefinition(t)); foreach (var item in items) { this.properties.Add(item); } if (typeof(IPropertiesContainer).GetTypeInfo().IsAssignableFrom(type)) { var one = new IndexerUsingIPropertiesPropertyDefinition(true); Properties.AddInternal(one); _defaultProperties.Add(one); } else if (typeof(IPropertyProvider).GetTypeInfo().IsAssignableFrom(type)) { // Try using IPropertyProvider var one = new IndexerUsingIPropertiesPropertyDefinition(typeof(IProperties).IsAssignableFrom(type)); Properties.AddInternal(one); _defaultProperties.Add(one); } var defaultMember = (PropertyInfo)this.type.GetTypeInfo().GetDefaultMembers().FirstOrDefault(IsValidIndexer); if (defaultMember != null) { var one = new ReflectedIndexerPropertyDefinition(defaultMember); Properties.AddInternal(one); _defaultProperties.Add(one); } var methods = type.GetTypeInfo().GetMethods(BindingFlags.Instance | BindingFlags.Public); FindExtensionProperties(methods); // Could define extender properties ExtensionCache.Init(); this.properties.MakeReadOnly(); }