2013-04-23 102 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