3

Lucene を読んでみると、すべてのリクエストで IndexSearcher の同じインスタンスを使用することが推奨されているようです。

ninject を使用して注入された検索クラスがある場合

public interface IPatientSearch
{
    void DoSearch(ref SearchDTO _search);

    //...
}

すべてのリクエストで同じインスタンスが共有されるようにする InSingletonScope を使用してバインドする問題はありますか?

        Bind<IPatientSearch>().To<PatientSearch>().InSingletonScope();

そのようなアプローチを使用することの明らかな落とし穴を見逃していますか?

4

1 に答える 1

5

Lucene.NET の観点からは、ここに問題はありません。IPatientSearchの実装が を作成し、それを使用すると仮定するIndexWriterと、問題はないはずです。このIndexWriterクラスはスレッドセーフであり、Lucene.NET インデックスへのアクセスに問題はありません。

ただし、実装の他のすべての側面がスレッドセーフであることを確認する必要がありますIPatientSearch。このシングルトンが複数のスレッドからアクセスされる場合、実装内の他の状態はスレッドセーフでなければなりません。クラスが Lucene.NET への呼び出しの単なるパススルーである場合は問題ありませんが、他の状態がある場合は、その状態へのアクセスが同期されていることを確認する必要があります。

Lucene.NET の周りにシン アブストラクションを作成し、それを依存性注入の目的でシングルトンにし、他のクラスを通常どおりにインスタンス化することができます (そのクラスのインスタンスが1 つだけ必要な場合を除く)。

于 2012-08-20T15:20:30.810 に答える