需要交换核心,因此需要在我的solrFacility中设置SolrCoreAdmin,所以我可以在整个应用程序中使用我的Windsor容器来使用它。
当我执行以下操作时:
var solrFacility = new SolrNetFacility(ConfigurationSettings.ContentSearch_Solr_ServiceBaseAddress);
solrFacility.AddCore(AgentsIndex.IndexName, typeof(AgentsIndexMapper), ConfigurationSettings.ContentSearch_Solr_ServiceBaseAddress +"/"+ AgentsIndex.IndexName);
solrFacility.AddCore(AgentsIndex.SwapIndexName, typeof(AgentsIndexMapper), ConfigurationSettings.ContentSearch_Solr_ServiceBaseAddress + "/" + AgentsIndex.SwapIndexName);
solrFacility.BuildCoreAdmin(ConfigurationSettings.ContentSearch_Solr_ServiceBaseAddress);
_WindsorContainer.AddFacility("solr", solrFacility);
我收到以下错误:
[NullReferenceException: Object reference not set to an instance of an object.]
Castle.Facilities.SolrNetIntegration.SolrNetFacility.BuildCoreAdmin(ISolrConnection conn) +40
我使用反射器在BuildCoreAdmin中查找代码,我认为它试图访问base.Kernel ...是null吗?我该如何设置内核?基本文件是AbstractFacility,它有一个函数setKernel。这个内核应该是什么?
我该如何解决这个问题?我是solrnet的新手,需要你的帮助。感谢您。 问候, Kasturi Chavan
答案 0 :(得分:0)
我得到了解决方案。我做错了。考虑发布答案以帮助其他人。
当初始化solrnetfacility时,solrcoreadmin也被初始化。我后来将这个solrnetfacility添加到我的容器(在这种情况下是城堡windsor),所以我可以在整个应用程序中使用它。
后来当我想在重建后交换索引时,我就解决了它
ISolrCoreAdmin _ISolrCoreAdmin = c.GetContainer().Resolve<ISolrCoreAdmin>();
ResponseHeader response = _ISolrCoreAdmin.Swap(corename, othername);
一切都准备好了! 希望它可以帮助某人。非常感谢所提供的所有帮助。