我有一个关于solrnet的问题,更具体地说是关于将字段映射到C#对象的问题。
我有以下代码:
var mgr = new MappingManager();
mgr.Add(typeof(Article).GetProperty("Title"), "newsTitle");
SolrServerElement news = new SolrServerElement();
news.Id = "news";
news.DocumentType = typeof(Article).AssemblyQualifiedName;
news.Url = "http://127.0.0.1:8080/solrNews/news";
SolrServers servers = new SolrServers();
servers.Add(news);
ObjectFactory.Initialize(
x =>
{
x.AddRegistry(
new SolrNetRegistry(servers)
);
x.For<IReadOnlyMappingManager>().Use(mgr);
}
);
_solr = ObjectFactory.GetInstance<ISolrOperations<Article>>();
_solr.Ping();
似乎没有将solr字段映射到C#中的对象属性。有什么想法吗?
答案 0 :(得分:2)
IIRC StructureMap有一个“最后注册获胜”的约定,即它成为服务的默认值。因此,如果您在添加SolrNetRegistry后注册IReadOnlyMappingManager,它将成为默认值。
答案 1 :(得分:0)
为了使MappingManager正常工作,首先需要从ObjectFactory中弹出IReadOnlyMappingManager,然后然后将其配置为使用您自己的MappingManager。
所以它会是这样的:
var mgr = new MappingManager();
mgr.Add(typeof(Article).GetProperty("Title"), "newsTitle");
ObjectFactory.EjectAllInstancesOf<IReadOnlyMappingManager>();
ObjectFactory.Configure(x => x.For<IReadOnlyMappingManager>().Use(mgr));