Ninject solrnet绑定疑惑

时间:2013-04-23 15:23:40

标签: ninject solrnet

我在项目中使用Ninject进行DI。我正在使用solrnet进行搜索功能,我正在尝试将Solr合并到Ninject中。以下是我在 Global.asax

中添加的代码
    protected override IKernel CreateKernel()
    {
        return new StandardKernel(new ServiceModule(), new SolrNetModule(ConfigurationManager.AppSettings["SearchServer"]));
    }

SolrnetModule.cs

public class SolrNetModule : NinjectModule 
{
    private readonly string serverURL;
    public IReadOnlyMappingManager Mapper { get; set; }

    public SolrNetModule(string serverURL)
    {
        this.serverURL = serverURL;
    }

    public override void Load()
    {
        var mapper = Mapper ?? new MemoizingMappingManager(new AttributesMappingManager());
        Bind<IReadOnlyMappingManager>().ToConstant(mapper);
        Bind<ISolrConnection>().ToConstant(new SolrConnection(serverURL));
        Bind(typeof(ISolrQueryResultParser<SolrSku>)).To(typeof(SolrQueryResultParser<SolrSku>));
        Bind(typeof(ISolrQueryExecuter<SolrSku>)).To(typeof(SolrQueryExecuter<SolrSku>));
        Bind(typeof(ISolrDocumentSerializer<SolrSku>)).To(typeof(SolrDocumentSerializer<SolrSku>));
        Bind(typeof(ISolrBasicOperations<SolrSku>)).To(typeof(SolrBasicServer<SolrSku>));
        Bind(typeof(ISolrOperations<SolrSku>)).To(typeof(SolrServer<SolrSku>));
        Bind(typeof(ISolrReadOnlyOperations<SolrSku>)).To(typeof(SolrServer<SolrSku>));
        Bind<ISolrService>().To<SolrService>();
    }
}

Solrservice.cs

 public class SolrService : ISolrService
 {
    public readonly ISolrReadOnlyOperations<SolrSku> _solr;     

    public SolrService(ISolrReadOnlyOperations<SolrSku> solr)
    {
        _solr = solr;
    }

    public ISolrQueryResults<SolrSku> SearchAll(string query)
    {
        var qopts = BuildParameters();
        var results = _solr.Query(query, qopts);
        return results;
    }

    private QueryOptions BuildParameters()
    {
        var qopts = new QueryOptions();
        qopts.AddOrder(new SortOrder("dateAdded", Order.DESC));
        return qopts;
    }
 }

在运行应用程序时,我收到以下错误 “激活ISolrQuerySerializer

时出错

没有匹配的绑定可用,并且该类型不可自我绑定。“

我在这里遗漏了什么,或者我在NInject中尝试使用Solr的方式是错误的?

1 个答案:

答案 0 :(得分:2)

由于您使用的是自定义SolrNetModule类,因此您似乎没有连接SolrNet堆栈中的所有必需依赖项,以便正确运行所有内容。我建议使用SolrNet提供的SolrNetModule。您可以从sourceNuGet获取此信息。或者,如果您仍想使用自己的自定义NinjectModule,我会从源代码中引用它进行比较。

更新:这可能是使用ASP.NET WebForms的Ninject的最佳示例(我假设您正在使用基于代码结构的ASP.NET WebForms)