C# 使用Ninject InSingletonScope()的Lucene.Net

C# 使用Ninject InSingletonScope()的Lucene.Net,c#,singleton,ninject,lucene.net,C#,Singleton,Ninject,Lucene.net,阅读Lucene,似乎建议在所有请求中使用相同的IndexSearcher实例 如果我有一个使用ninject注入的搜索类 public interface IPatientSearch { void DoSearch(ref SearchDTO _search); //... } 使用InSingletonScope绑定它是否会有任何问题,这将确保在所有请求中共享同一实例 Bind<IPatientSearch>().To<PatientS

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

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

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

    //...
}
使用InSingletonScope绑定它是否会有任何问题,这将确保在所有请求中共享同一实例

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

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

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

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


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

谢谢CasperOne。我确保实现是线程安全的。我已经用了几个星期了,到目前为止还没有出现任何问题!