SolrNet Autofac - 使用 SolrPostConnection
SolrNet Autofac - Use SolrPostConnection
我在我的 Web 应用程序中使用 SolrNet
和 Autofac
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
改用 SolrPostConnection
。
您似乎需要覆盖接口 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);
}
希望对您有所帮助。
我在我的 Web 应用程序中使用 SolrNet
和 Autofac
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
改用 SolrPostConnection
。
您似乎需要覆盖接口 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);
}
希望对您有所帮助。