Как зарегистрировать 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);
        }
    }
Другие вопросы по тегам