Я пытаюсь реализовать пользовательский IReadOnlyMappingManager в solrnet, чтобы позволить нам использовать наши собственные типы атрибутов для украшения свойств документов, которые представляют наши записи индекса solr.Так как мне нужно только заменить реализацию методов GetFields и GetUniqueKey, текущая реализация выглядит следующим образом:
public class CustomMappingManager : AttributesMappingManager
{
public new ICollection<KeyValuePair<PropertyInfo, string>> GetFields(Type type)
{
IEnumerable<KeyValuePair<PropertyInfo, IndexFieldAttribute[]>> mappedProperties = this.GetPropertiesWithAttribute<IndexFieldAttribute>(type);
IEnumerable<KeyValuePair<PropertyInfo, string>> fields = from mapping in mappedProperties
select new KeyValuePair<PropertyInfo, string>(mapping.Key, mapping.Value[0].FieldName ?? mapping.Key.Name);
return new List<KeyValuePair<PropertyInfo, string>>(fields);
}
public new KeyValuePair<PropertyInfo, string> GetUniqueKey(Type type)
{
KeyValuePair<PropertyInfo, string> uniqueKey;
IEnumerable<KeyValuePair<PropertyInfo, IndexUniqueKeyAttribute[]>> mappedProperties = this.GetPropertiesWithAttribute<IndexUniqueKeyAttribute>(type);
IEnumerable<KeyValuePair<PropertyInfo, string>> fields = from mapping in mappedProperties
select new KeyValuePair<PropertyInfo, string>(mapping.Key, mapping.Value[0].FieldName ?? mapping.Key.Name);
uniqueKey = fields.FirstOrDefault();
return uniqueKey;
}
}
Этот тип был успешно подключен с использованием Structuremap, и mappingManager в моем конкретном экземпляре ISolrOperationsэкземпляр этого типа CustomMappingManager.
Я проследил трассировку стека вплоть до Viistors в реализации solrnet, которые выполняют реальную работу;у них есть экземпляр CustomMappingManager, как и предполагалось.К сожалению, методы GetFields и GetUniqueKey для этого типа никогда не вызываются, и мои документы всегда пусты.
Любые идеи очень приветствуются.