C# SolrNet多连接,具有一个核心和类型
你好,我有一个很大的问题。我需要使用单一类型获取/创建到一个核心的连接,并进行任何操作。 目前,它看起来像:C# SolrNet多连接,具有一个核心和类型,c#,solr,solrnet,C#,Solr,Solrnet,你好,我有一个很大的问题。我需要使用单一类型获取/创建到一个核心的连接,并进行任何操作。 目前,它看起来像: public class SolrMachine<T> : ISolrMachine<T> where T : ISolrRecord { private ISolrOperations<T> actuallyInstance { get; set; } public SolrMachine(string coreName)
public class SolrMachine<T> : ISolrMachine<T> where T : ISolrRecord
{
private ISolrOperations<T> actuallyInstance { get; set; }
public SolrMachine(string coreName)
{
string url = String.Format("http://xxxx/solr/{0}", coreName);
ISolrConnection solrConnection = new SolrConnection(url) { HttpWebRequestFactory = new SolrAuthWebRequestFactory()};
Startup.Init<T>(solrConnection);
var myInstance = ServiceLocator.Current.GetInstance<ISolrOperations<T>>();
this.actuallyInstance = myInstance;
}
}
但是当我尝试使用一种类型和一个coreName进行连接时,我在Startup.Init(solrConnection)
上出现了异常。我知道Startup
container会阻止具有相同Type
和coreName
的连接,但我总是为此SolrMachine创建一个新实例。我期望:
class SomeClass
{
public MyMethod()
{
SolrMachine<SolrTypeOne> myConn = new SolrMachine<SolrTypeOne>(firstCoreName);
// operation
}
}
class SecondSomeClass
{
public MyMethod()
{
SolrMachine<SolrTypeOne> myConn2 = new SolrMachine<SolrTypeOne>(firstCoreName);
// here it's not work
}
}
class-SomeClass
{
公共方法()
{
SolrMachine myConn=新SolrMachine(firstCoreName);
//操作
}
}
二等舱
{
公共方法()
{
SolrMachine myConn2=新SolrMachine(firstCoreName);
//这里没有工作
}
}
如何避免这种情况?在我的例子中,问题是我的Solr使用了
IHttpWebRequestFactory
。从SolrNet多核文档作者不采取这个问题。以下是我的解决方案(使用温莎):
公共类SolrAuth:IHttpWebRequestFactory
{
公共IHttpWebRequest创建(Uri url)
{
//…凭证、超时等。
返回新的HttpWebRequestAdapter((HttpWebRequest)webrequest);
}
}
公共类SolrMachine:ISolrMachine其中T:ISolrRecord
{
公共WindsorContainer myContainer=新WindsorContainer();
私有Isolroperties实际状态{get;set;}
公共SolrMachine(字符串coreName)
{
var url=string.Format(“http://xxx/solr/{0}”,coreName);
myContainer.Register(Component.For().ImplementedBy());
var solrFacility=新的SolrNetFacility(string.Format(“http://xxx/solr/{0}(“defaultCollection”);
AddCore(coreName,typeof(T),url);
myContainer.AddFacility(solrFacility);
this.actuallyInstance=myContainer.Resolve();
}
}
我的案子有答案吗?:)“内置容器目前仅限于访问具有不同映射类型的多个核心/实例。”是的,我知道,我在前面说过。现在我正在尝试结构图和温莎设施。在structuremap中,我遇到了错误:无法使用集合初始值设定项初始化类型“structuremap.SolrNetIntegration.Config.SolrServers”,因为它未实现
您能在中发布该structuremap错误吗?
class SomeClass
{
public MyMethod()
{
SolrMachine<SolrTypeOne> myConn = new SolrMachine<SolrTypeOne>(firstCoreName);
// operation
}
}
class SecondSomeClass
{
public MyMethod()
{
SolrMachine<SolrTypeOne> myConn2 = new SolrMachine<SolrTypeOne>(firstCoreName);
// here it's not work
}
}
public class SolrAuth : IHttpWebRequestFactory
{
public IHttpWebRequest Create(Uri url)
{
//... credentials, timeouts, etc.
return new HttpWebRequestAdapter((HttpWebRequest)webrequest);
}
}
public class SolrMachine<T> : ISolrMachine<T> where T : ISolrRecord
{
public WindsorContainer myContainer = new WindsorContainer();
private ISolrOperations<T> actuallyInstance { get; set; }
public SolrMachine(string coreName)
{
var url = string.Format("http://xxx/solr/{0}", coreName);
myContainer.Register(Component.For<IHttpWebRequestFactory>().ImplementedBy<SolrAuth>());
var solrFacility = new SolrNetFacility(string.Format("http://xxx/solr/{0}", "defaultCollection"));
solrFacility.AddCore(coreName, typeof(T), url);
myContainer.AddFacility(solrFacility);
this.actuallyInstance = myContainer.Resolve<ISolrOperations<T>>();
}
}