C# 具有Castle Windsor和基本身份验证的SolrNet

C# 具有Castle Windsor和基本身份验证的SolrNet,c#,.net,castle-windsor,basic-authentication,solrnet,C#,.net,Castle Windsor,Basic Authentication,Solrnet,我使用Windsor容器进行SolrNet多核访问,但我的Solr核需要基本身份验证。是否可以使用SolrNet Windsor与身份验证集成 下一步我将尝试: static SolrInteractServer() { container.Register(Component.For<ISolrConnection>().ImplementedBy<SolrConnection>().DependsOn(Property.ForKey<IH

我使用Windsor容器进行SolrNet多核访问,但我的Solr核需要基本身份验证。是否可以使用SolrNet Windsor与身份验证集成

下一步我将尝试:

static SolrInteractServer()
    {
        container.Register(Component.For<ISolrConnection>().ImplementedBy<SolrConnection>().DependsOn(Property.ForKey<IHttpWebRequestFactory>().Eq(new WebAuthentication("login", "password"))));
    }

private static WindsorContainer container = new WindsorContainer();

public static void RegisterFacility<T>(IEnumerable<string> coreUrls, string baseHttpUrl = null)
    {
        SolrNetFacility facility = null;
        if (baseHttpUrl != null)
        {
            facility = new SolrNetFacility(baseHttpUrl);
        }
        else
        {
            facility = new SolrNetFacility();
        }
        foreach (var httpUrl in coreUrls)
        {
            var coreName = "core_" + Guid.NewGuid();
            facility.AddCore(coreName, typeof(T), httpUrl);
            RegisteredCores.Add(coreName, new KeyValuePair<Type, string>(typeof(T), httpUrl));
        }

        container.AddFacility("solr", facility);
    }

    public static Dictionary<string, KeyValuePair<Type, string>> RegisteredCores = new Dictionary<string, KeyValuePair<Type, string>>();
static SolrInteractServer()
{
container.Register(Component.For().ImplementedBy().DependsOn(Property.ForKey().Eq(新的WebAuthentication(“登录”、“密码”))));
}
私有静态WindsorContainer容器=新WindsorContainer();
公共静态无效注册表功能(IEnumerable CoreURL,字符串baseHttpUrl=null)
{
SolrNetFacility设施=空;
if(baseHttpUrl!=null)
{
设施=新的SolrNetFacility(baseHttpUrl);
}
其他的
{
设施=新的SolrNetFacility();
}
foreach(coreUrls中的var httpUrl)
{
var coreName=“core_”+Guid.NewGuid();
AddCore(coreName,typeof(T),httpUrl);
Add(coreName,newkeyvaluepair(typeof(T),httpUrl));
}
集装箱。添加设施(“solr”,设施);
}
public static Dictionary RegisteredCores=new Dictionary();
运行container.AddFacility时抛出:

无法注册组件SolrNet.Impl.SolrConnection。已存在具有该名称的组件。是否要修改该文件 而不是现有组件?如果不是,请确保指定一个唯一的 名字

和堆栈跟踪:

在 Castle.MicroKernel.subsystem.Naming.DefaultNamingSubSystem.Register(IHandler (a)在 Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.RegisterHandler(字符串 名称,IHandler处理程序,布尔SkipPregistration)位于 Castle.MicroKernel.Handlers.DefaultHandlerFactory.Create(ComponentModel 模型,布尔值isMetaHandler)位于 Castle.MicroKernel.DefaultKernel.AddCustomComponent(ComponentModel 模型,布尔值isMetaHandler)位于 Castle.MicroKernel.DefaultKernel.AddCustomComponent(ComponentModel 模型)在 Castle.MicroKernel.Registration.ComponentRegistration
1.Castle.MicroKernel.Registration.IRegistration.Register(IKernelInternal
内核)在
Castle.MicroKernel.DefaultKernel.Register(IRegistration[]
注册)在
中的Castle.Facilities.SolrNetIntegration.SolrNetFacility.Init()
g:\prg\SolrNet\Castle.Facilities.SolrNetIntegration\solrnetfacity.cs:line
80分
Castle.MicroKernel.Facilities.AbstractFacility.Castle.MicroKernel.ifaccility.Init(IKernel
内核,IConfigurationfacilityConfig)位于
Castle.MicroKernel.DefaultKernel.AddFacility(IFacility设施)位于
Castle.MicroKernel.DefaultKernel.AddFacility(字符串键,ifaccility
设施)位于Castle.Windsor.WindsorContainer.AddFacility(字符串
(配置、设施)位于
SolrInteractionLogic.Core.SolrInteractServer
1.RegisterFacility[T](IEnumerable`1 D:\1中的coreUrls,字符串baseHttpUrl)。作业项目\1。在里面 进展\语义 Force\Reporting\SFDigestGenerator\SolrInteractionLogic\Core\SolrInteractServer.cs:line 58位于D:\1中的SolrInteractionTest.Program.Main(字符串[]args)。工作 项目\1。进行中\语义 Force\Reporting\SFDigestGenerator\SolrInteractionTest\Program.cs:line 26位于System.AppDomain.\u下一个安全程序集(运行时程序集, 字符串[]args)位于 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallback回调、对象状态、布尔值 ignoreSyncCtx)在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext、ContextCallback回调、对象状态)位于 System.Threading.ThreadHelper.ThreadStart()


您必须在容器中注册
IHttpWebRequestFactory
,而不是
ISolrConnection

您必须在容器中注册
IHttpWebRequestFactory
,而不是
ISolrConnection

使用以下行来实现身份验证

container.Register(Component.For<ISolrConnection>().ImplementedBy<SolrConnection>().Named(core1Connection).DependsOn(Property.ForKey<IHttpWebRequestFactory>().Eq(new BasicAuthHttpWebRequestFactory("User", "password"))).Parameters(Castle.MicroKernel.Registration.Parameter.ForKey("serverURL").Eq(core1url)));
container.Register(Component.For().ImplementedBy().Named(core1Connection).DependsOn(Property.ForKey().Eq(new BasicAuthHttpWebRequestFactory(“用户”、“密码”))).Parameters(Castle.MicroKernel.registation.Parameter.ForKey(“服务器URL”).Eq(core1url));

使用以下行来实现身份验证

container.Register(Component.For<ISolrConnection>().ImplementedBy<SolrConnection>().Named(core1Connection).DependsOn(Property.ForKey<IHttpWebRequestFactory>().Eq(new BasicAuthHttpWebRequestFactory("User", "password"))).Parameters(Castle.MicroKernel.Registration.Parameter.ForKey("serverURL").Eq(core1url)));
container.Register(Component.For().ImplementedBy().Named(core1Connection).DependsOn(Property.ForKey().Eq(new BasicAuthHttpWebRequestFactory(“用户”、“密码”))).Parameters(Castle.MicroKernel.registation.Parameter.ForKey(“服务器URL”).Eq(core1url));

@MauricioScheffer请将代码作为问题的一部分发布。同时发布整个异常堆栈跟踪。您在何处以及如何调用SolrInteractServer()和RegisterFacility()?@MauricioScheffer@MauricioScheffer请将代码作为问题的一部分发布。还要发布整个异常堆栈跟踪。您在何处以及如何调用SolrInteractServer()和RegisterFacility()?@MauricioScheffer@DrAlligieri是的,Windsor会自动执行。好的,稍后尝试测试-现在我们出于工作目的禁用身份验证。谢谢你!再次返回到auth实现。这个解决方案是正确的。非常感谢。下面这行代码适用于我-
windsorOffersContainer.Register(Component.for().ImplementedBy().DependsOn(Property.ForKey(“用户名”).Eq(“管理员”),Property.ForKey(用户名).Eq(密码))@DrAlligieri是的,Windsor会自动执行。好的,稍后尝试测试-现在我们出于工作目的禁用身份验证。谢谢你!再次返回到auth实现。这个解决方案是正确的。非常感谢。下面这行代码适用于我-
windsorOffersContainer.Register(Component.for().ImplementedBy().DependsOn(Property.ForKey(“用户名”).Eq(“管理员”),Property.ForKey(用户名).Eq(密码))