阅读Lucene,似乎建议在所有请求中使用相同的IndexSearcher实例。
如果我有一个使用ninject注入的搜索类
public interface IPatientSearch
{
void DoSearch(ref SearchDTO _search);
//...
}
使用InSingletonScope绑定它会有什么问题,这会确保所有请求共享同一个实例吗?
Bind<IPatientSearch>().To<PatientSearch>().InSingletonScope();
我是否遗漏了使用这种方法的任何明显缺陷?
答案 0 :(得分:5)
从Lucene.NET的角度来看,这里没有问题;假设您IPatientSearch
的实施创建了IndexWriter
并使用它,那么应该没有任何问题。 IndexWriter
类是线程安全的,访问Lucene.NET索引不会有任何麻烦。
但是,您必须确保IPatientSearch
实现的所有其他方面是线程安全的;如果从多个线程访问此单例,则实现中的任何其他状态必须是线程安全的。如果你的类只是调用Lucene.NET的传递,那么你会没事的,但如果你有其他状态,那么你需要确保同步访问该状态。
您可能希望围绕Lucene.NET创建一个精简抽象,并为了依赖注入而使 成为单例,并让您的其他类正常实例化(除非您只需要该类的一个实例。)