2013-04-23 5 views
0

Я использую Ninject для DI в моем проекте. Я использую solrnet для поиска, и я пытаюсь включить Solr в Ninject. Ниже код я добавил в Global.asaxNinject 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; 
    } 
} 

во время работы приложения, I я получаю ошибку ниже "Ошибка активация ISolrQuerySerializer

Нет соответствующих привязок, и тип не является самопереключаемым. "

Мне что-то не хватает или так, как я пытаюсь использовать Solr в NInject, неправильно?

ответ

2

Поскольку вы используете собственный класс SolrNetModule, кажется, что вы не подключили все необходимые зависимости в стеке SolrNet, чтобы все работало правильно. Я бы рекомендовал использовать SolrNetModule, который поставляется с SolrNet. Вы можете получить это либо от source, либо через NuGet. В качестве альтернативы, если вы все еще хотите использовать свой собственный NinjectModule, я бы ссылался на источник из источника для сравнения.

Update: Вот, пожалуй, лучший пример использования Ninject с ASP.NET WebForms (я предполагаю, что вы используете ASP.NET WebForms на основе вашей структуры кода)

+0

Спасибо Paige, я попробовал как ссылки, код примера, который они определили в (SolrNet/Ninject.Integration.SolrNet.Tests/NinjectFixture.cs), содержит инициализацию ядра (var c = new StandardKernel();), однако моя инициализация происходит в Global.asax. Мне нужен образец кода для вызова метода Solr. Было бы полезно, если бы у вас был такой код – Robert

+0

Вам нужен пример получения экземпляра solr из ядра Ninject или вызова Solr в целом? –

+0

Мне хорошо с кодом для вызова solr в целом. Мне нужен код для определения экземпляра solr из ядра Ninject? – Robert