【问题标题】:Ninject solrnet binding doubtsNinject solrnet 绑定疑惑
【发布时间】:2013-04-16 21:33:39
【问题描述】:

我在我的项目中使用 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 的方式是错误的?

【问题讨论】:

    标签: ninject solrnet


    【解决方案1】:

    由于您使用的是自定义 SolrNetModule 类,因此您似乎没有在 SolrNet 堆栈中连接所有必需的依赖项以使一切正常运行。我建议使用 SolrNet 提供的SolrNetModule。您可以从source 或通过NuGet 获得此信息。或者,如果您仍想使用自己的自定义 NinjectModule,我会参考源中的那个进行比较。

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

    【讨论】:

    • 感谢 Paige,我尝试了这两个链接,他们在 (SolrNet / Ninject.Integration.SolrNet.Tests / NinjectFixture.cs) 中定义的示例代码包含内核的初始化(var c = new StandardKernel ();),但是我的初始化发生在 Global.asax 中。我需要一些示例代码来调用 Solr 方法。如果你有任何这样的代码会很有帮助
    • 您是否需要一个从 Ninject 内核获取 solr 实例或调用 Solr 的示例?
    • 我很擅长调用 solr 的代码。我需要代码来定义 Ninject 内核中的 solr 实例吗?
    • 更新了在 ASP.NET WebForms 中使用 Ninject 的链接。
    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多