与StructureMap的solrnet

时间:2011-12-13 15:34:29

标签: structuremap solrnet

我有一个关于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#中的对象属性。有什么想法吗?

2 个答案:

答案 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));