Как зарегистрировать ISolrFieldSerializer в контейнере Windsor, чтобы SolrNet мог его забрать
Я пытаюсь получить перечисление, чтобы сериализовать его значение int при публикации в Solr.
Поэтому я реализовал ISolrFieldSerializer, чтобы сделать это, как предлагается здесь. Но мне кажется, что я могу зарегистрировать его в контейнере Виндзор таким образом, чтобы потом его использовал SolrNet
Вот что у меня есть:
Это прекрасно работает, за исключением того, что сериализатор не привыкает, хотя он появляется в списке компонентов контейнеров. Есть идеи?
container.Register(Component.For<ISolrFieldSerializer>().ImplementedBy<SolrEnumSerializer>());
Startup.Init<SearchBox>("http://10.10.10.10:0000/solr/boxes");
container.Register(Component.For<ISolrOperations<SearchBox>>()
.UsingFactoryMethod(k => ServiceLocator.Current.GetInstance<ISolrOperations<SearchBox>>()));
1 ответ
Я отсортировал это, удалив реализацию по умолчанию и заменив ее собственной:
Startup.Container.Remove<ISolrFieldSerializer>();
var fieldSerializer = new CustomSerializer();
Startup.Container.Register<ISolrFieldSerializer>(c => fieldSerializer);
Custom Sertializer:
public class CustomSerializer : ISolrFieldSerializer
{
private readonly AggregateFieldSerializer _serializer;
public CustomSerializer()
{
_serializer = new AggregateFieldSerializer(new ISolrFieldSerializer[]
{
new MyCustom1Serializer(),
new MyCustom2Serializer(),
new CollectionFieldSerializer(this),
new GenericDictionaryFieldSerializer(this),
new NullableFieldSerializer(new BoolFieldSerializer()),
new NullableFieldSerializer(new DateTimeFieldSerializer()),
//new MoneyFieldSerializer(),
new FormattableFieldSerializer(),
new TypeConvertingFieldSerializer(),
});
}
public bool CanHandleType(Type t)
{
return _serializer.CanHandleType(t);
}
public IEnumerable<PropertyNode> Serialize(object obj)
{
return _serializer.Serialize(obj);
}
}