0

私はこれを間違って使用している可能性があると思います.複数のコアのNinjectバリアントにはあまりありませんでしたが、NinjectとSolrNetを使用しようとしています. 完全にルーズなマッピングを利用しながら。したがって、Ninject の名前付きバインディングを使用する必要があることはわかっています。Windsor を使用できません。dll が現在のものとうまく機能しないようです。

容疑者コード:

SolrServers cores = new SolrServers();

cores.Add(new SolrServerElement
{
    Id = "index1",
    DocumentType = typeof(ISolrOperations<Dictionary<string, object>>).AssemblyQualifiedName,
    Url = "http://localhost:8080/solr/index1",
});

cores.Add(new SolrServerElement
{
    Id = "index2",
    DocumentType = typeof(ISolrOperations<Dictionary<string, object>>).AssemblyQualifiedName,
    Url = "http://localhost:8080/solr/index2",
});

var kernal = new StandardKernel(new SolrNetModule(cores));
var operations = kernal.Get<ISolrOperations<Dictionary<string, object>>>("index1");

発生したエラー:

Test 'Test.DifferentTest' failed: 
Ninject.ActivationException : Error activating ISolrOperations{Dictionary{string, Object}}
No matching bindings are available, and the type is not self-bindable.
Activation path:
    1) Request for ISolrOperations{Dictionary{string, Object}}

DI の概念は理解していますが、MVC ではすべてが隠されているように見えたため、それ以上のことはわかりません。したがって、これがばかげている理由/SolrNetがそれとどのように相互作用するかについての追加の説明をいただければ幸いです。

SolrNet モジュールへのリンクhttps://github.com/mausch/SolrNet/blob/master/Ninject.Integration.SolrNet/SolrNetModule.cs

4

3 に答える 3

0

その後、 SolrNetが更新され、名前付きバインディングを持つ同じDocumentTypeの複数のコアがサポートされるようになったため、疑わしいコードが機能するようになりました。

于 2012-05-02T13:57:01.887 に答える
0

SolrNet の完全にルーズなマッピング機能を使用していることがわかったので、同じ型/クラスのサポートが Ninject の SolrNet に追加されるまで、次の動的マッピングを回避策として実装できます。

 public class Index1Item
 {
     SolrField["*"]
     public IDictionary<string, object> Fields { get; set; }
 }

 public class Index2Item
 {
     SolrField["*"]
     public IDictionary<string, object> Fields { get; set; }
 }

この動的マッピングの詳細については、SolrNet プロジェクト ページのマッピングを参照してください。

次に、SolrNet セットアップは次のように変更されます。

 SolrServers cores = new SolrServers();

 cores.Add(new SolrServerElement
 {
     Id = "index1",
     DocumentType = typeof(Index1Item).AssemblyQualifiedName,
     Url = "http://localhost:8080/solr/index1",
 });

 cores.Add(new SolrServerElement
 {
     Id = "index2",
     DocumentType = typeof(Index2Item).AssemblyQualifiedName,
     Url = "http://localhost:8080/solr/index2", 
 });

 var kernal = new StandardKernel(new SolrNetModule(cores));
 var operations = kernal.Get<ISolrOperations<Index1Item>>("index1");

うまくいけば、これは役に立ちます...

于 2012-04-17T14:28:04.117 に答える
0

Solr はまだ使用していませんが、github で見つけたモジュールから、ISolrOperations の代わりにジェネリック型引数をドキュメント型に割り当てる必要があると思います。

于 2012-04-16T22:23:28.103 に答える