Lucene.Net使用Ninject InSingletonScope()

时间:2012-07-25 12:50:40

标签: c# singleton ninject lucene.net

阅读Lucene,似乎建议在所有请求中使用相同的IndexSearcher实例。

如果我有一个使用ninject注入的搜索类

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

    //...
}

使用InSingletonScope绑定它会有什么问题,这会确保所有请求共享同一个实例吗?

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

我是否遗漏了使用这种方法的任何明显缺陷?

1 个答案:

答案 0 :(得分:5)

从Lucene.NET的角度来看,这里没有问题;假设您IPatientSearch的实施创建了IndexWriter并使用它,那么应该没有任何问题。 IndexWriter类是线程安全的,访问Lucene.NET索引不会有任何麻烦。

但是,您必须确保IPatientSearch实现的所有其他方面是线程安全的;如果从多个线程访问此单例,则实现中的任何其他状态必须是线程安全的。如果你的类只是调用Lucene.NET的传递,那么你会没事的,但如果你有其他状态,那么你需要确保同步访问该状态。

您可能希望围绕Lucene.NET创建一个精简抽象,并为了依赖注入而使 成为单例,并让您的其他类正常实例化(除非您只需要该类的一个实例。)