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>>();
    }
}