2013-04-23 86 views
0

我在我的項目中使用Ninject進行DI。我正在使用solrnet進行搜索功能,我正在嘗試將Solr併入Ninject。下面是我的代碼已經在添加Global.asax中Ninject solrnet綁定疑惑

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的方式是錯誤的嗎?

回答

2

由於您使用的是自定義SolrNetModule類,因此您似乎沒有連接SolrNet堆棧中的所有必需依賴項,以便所有內容都能正常運行。我建議使用SolrNet提供的SolrNetModule。您可以從sourceNuGet獲得此信息。另外,如果你仍然想使用你自己定製的NinjectModule,我會引用來自源的比較。

更新:這裏大概Ninject與ASP.NET Web窗體的使用(我假設你使用的是基於您的代碼結構ASP.NET的WebForms)最好的例子

+0

感謝Paige,我嘗試了兩個鏈接,它們在(SolrNet/Ninject.Integration.SolrNet.Tests/NinjectFixture.cs)中定義的示例代碼包含初始化內核(var c = new StandardKernel();),但是我的初始化發生在Global.asax中。我需要一些示例代碼來調用Solr方法。如果您有任何這樣的代碼,這將有所幫助 – Robert 2013-04-23 16:23:41

+0

您是否需要一個從Ninject內核獲取solr實例或一般調用Solr的示例? – 2013-04-23 17:09:01

+0

我很喜歡調用solr的代碼。我需要從Ninject內核定義solr實例的代碼? – Robert 2013-04-23 18:08:29