Lucene.Net使用Ninject InSingletonScope()

Chr*_*s W 3 c# singleton lucene.net ninject

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

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

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

    //...
}
Run Code Online (Sandbox Code Playgroud)

是否存在使用InSingletonScope绑定它的任何问题,这将确保在所有请求中共享相同的实例?

        Bind<IPatientSearch>().To<PatientSearch>().InSingletonScope();
Run Code Online (Sandbox Code Playgroud)

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

cas*_*One 5

从Lucene.NET的角度来看,这里没有问题; 假设您的实现IPatientSearch创建IndexWriter并使用它,应该没有任何问题.该IndexWriter班是线程安全的,你不会有访问您的Lucene.NET指数任何麻烦.

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

你可能想创建一个围绕Lucene.NET薄的抽象,使对依赖注入的目的,单身,和你的其他类实例正常(除非你只需要一个该类的实例).