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 创建一个瘦抽象,并将设为单例以用于依赖注入,并让您的其他类正常实例化(除非您只需要该类的一个实例)。

于 2012-08-20T15:20:30.810 回答