2012-07-25 33 views
3

讀到Lucene,似乎推薦在所有請求中使用同一個IndexSearcher實例。使用Ninject的Lucene.Net InSingletonScope()

如果我有使用ninject

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

    //... 
} 

會不會有使用InSingletonScope任何問題,結合它注入了搜索類,這將確保相同的實例在所有請求共享?

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

我是否錯過了使用這種方法的任何明顯的缺陷?

回答

5

從Lucene.NET的角度來看,這裏沒有問題;假設你的實施IPatientSearch創建一個IndexWriter並使用它,應該沒有任何問題。 IndexWriter類是線程安全的,您將不會有任何麻煩訪問您的Lucene.NET索引。

但是,您必須確保IPatientSearch實現的所有其他方面都是線程安全的;如果這個單例是從多個線程訪問的,那麼你在實現中的任何其他狀態都必須是線程安全的。如果你的類只是調用Lucene.NET的傳遞,那麼你會好起來的,但是如果你有其他狀態,那麼你需要確保訪問狀態是同步的。

你可能想圍繞Lucene.NET形成了一層抽象,使依賴注入的目的,單身,和你的其他類實例正常(除非你需要一個類只有一個例如 )。

+0

謝謝CasperOne。我確保實施是線程安全的。我已經使用了它幾個星期了,到目前爲止沒有任何問題出現! – 2012-08-21 08:38:42