2012-08-05 54 views
0

我想獲得一個枚舉序列化到它的int值發佈到Solr時。如何註冊一個ISOLrFieldSerializer在溫莎容器,以便SolrNet可以拿起它

所以我實施了ISolrFieldSerializer來做到這一點,建議here。但是,我似乎可以在Windsor容器內註冊它的方式,它隨後被使用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>>())); 
+0

嘗試張貼https://groups.google。 COM /論壇/?fromgroups#!論壇/ solrnet – 2012-08-07 16:13:56

回答

2

我整理的作法是刪除默認的實現,並使用自定義的替換它:

Startup.Container.Remove<ISolrFieldSerializer>(); 

var fieldSerializer = new CustomSerializer(); 
Startup.Container.Register<ISolrFieldSerializer>(c => fieldSerializer); 

定製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); 
     } 
    } 
相關問題