代码之家  ›  专栏  ›  技术社区  ›  Rob shassss

solrnet autopac-使用solrpostconnection

  •  0
  • Rob shassss  · 技术社区  · 8 年前

    我在用 SolrNet 具有 Autofac 在我的Web应用程序中,这样的DI:

    var solrNetModule = new SolrNetModule(ConfigurationManager.ConnectionStrings["solr"].ConnectionString);
    solrNetModule.HttpWebRequestFactory = new BasicAuthHttpWebRequestFactory("****", "****");
    builder.RegisterModule(solrNetModule);
    

    我的查询很长,有时会在Jetty中出现404,我很确定这是因为URL的长度。

    我一直在读关于 SolrPostConnection 这听起来是解决我的问题的正确方法,但我在 AutoFac 设置。

    我知道 AutoFac SolrNetModule 集成内部使用

    builder.RegisterInstance(solrConnectionInstance).As<ISolrConnection>();
    

    但我不知道如何覆盖它,或者 .Register AutoFac 使用 Solrpost连接 相反。

    1 回复  |  直到 8 年前
        1
  •  1
  •   KozhevnikovDmitry    8 年前

    看起来您需要覆盖接口的注册 ISolrConnection . 主要问题是 SolrNetModule 不提供solrconnection到自身的映射。试试下面的例子。我添加了另一个注册 SolrConnection 使其可注射到 PostSolrConnection 没有依赖循环

    [Test]
    public void SolrRegistrationOverride()
    {
        // Arrange
        var builder = new ContainerBuilder();
        var serverUrl = ConfigurationManager.ConnectionStrings["solr"].ConnectionString;
        var httpWebRequestFactory = new BasicAuthHttpWebRequestFactory("****", "****");
        var solrNetModule = new SolrNetModule(serverUrl);
        solrNetModule.HttpWebRequestFactory = httpWebRequestFactory;
        builder.RegisterModule(solrNetModule);
    
        builder.RegisterType<SolrConnection>().AsSelf()
               .WithParameter(new NamedParameter("serverURL", serverUrl))
               .WithProperty("HttpWebRequestFactory", httpWebRequestFactory).AsSelf()
               .SingleInstance();
    
        builder.RegisterType<PostSolrConnection>().As<ISolrConnection>()
               .WithParameters(new Parameter[]
               {
                   new ResolvedParameter((prm, сtx) => prm.Name == "conn", (prm, ctx) => ctx.Resolve<SolrConnection>()),
                   new NamedParameter("serverUrl", serverUrl)
               });
    
        var container = builder.Build();
    
        // Act
        var conn = container.Resolve<ISolrConnection>();
    
        // Assert
        Assert.IsInstanceOf<PostSolrConnection>(conn);
    }
    

    希望它有帮助。

    推荐文章