【问题标题】:Lucene.Net using Ninject InSingletonScope()Lucene.Net 使用 Ninject InSingletonScope()
【发布时间】:2012-07-25 12:50:40
【问题描述】:

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

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

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

    //...
}

使用 InSingletonScope 绑定它会不会有任何问题,这将确保所有请求共享同一个实例?

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

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

【问题讨论】:

    标签: c# singleton ninject lucene.net


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢 CasperOne。我确保实现是线程安全的。我已经使用它几个星期了,到目前为止没有出现任何问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    相关资源
    最近更新 更多