SolrNet连接的说明

为什么SolrNet连接的容器保持静态? 这是一个非常大的错误,因为在我们的应用程序中,我们向应用程序发送异步请求时,SolrNet表现exception。 我如何在SolrNet中避免这个问题?

class P { static void M(string[] a) { Thread t = new Thread(delegate() { f1(); }); Thread t1 = new Thread(delegate() { f2(); }); t.Start(); t1.Start(); t.Join(); t1.Join(); } static void f1() { Startup.Init(new SolrNet.Impl.SolrPostConnection("http://localhost:8983/solr3/")); ISolrOperations solrOperations2 = ServiceLocator.Current.GetInstance<ISolrOperations>(); } static void f2() { Startup.Init(new SolrNet.Impl.SolrPostConnection("http://localhost:8983/solr1/")); ISolrOperations solrOperations2 = ServiceLocator.Current.GetInstance<ISolrOperations>(); } } 

  1. 如wiki中所述 ,内置容器(Startup)目前仅限于访问具有不同映射类型的多个核心/实例。 如果您想要更灵活,可以切换到Windsor / StructureMap / Autofac,或者帮助实现此function 。

  2. 正如您所发现的那样,内置容器中的注册可能不是线程安全的,但是通过在不同的线程中注册/初始化SolrNet,您无法获得任何好处。 只需将所有初始化移动到单个线程,当您执行solr.Query(…)或solr.Add(…)时,执行实际繁重的工作线程安全的。