我有一个场景,只要一个对象返回true,多个并发Web请求就应该重用一个对象。有问题的对象是线程安全的。
所以我需要当前在范围内的对象来确定它是否仍在范围内。使用Ninject实现这一目标的最佳方法是什么?
虽然可能不需要回答这个问题,但目标是在基础索引未被更改时重用Lucene IndexSearcher / IndexReader。 Reader有一个方法IsCurrent,如果索引被更改,则返回false。
答案 0 :(得分:1)
Hy,您可以定义自己的范围对象。只要scope对象处于活动状态且未更改,ninject将返回绑定类型的相同实例。自定义范围需要检查IsCurrent是否返回false。您可以查看如何在其中实现自定义范围 https://github.com/ninject/ninject.extensions.namedscope/tree/master/src/Ninject.Extensions.NamedScope。请注意,在开发自己的示波器时,必须注意不要创建永远不会为GC发布的对象!
答案 1 :(得分:0)
为了让我能够达到你想要的目的,最好是使用提供者:
Bind<ILuceneIndex>().ToProvider(new LuceneIndexProvider());
并在提供者中应用您的重新创建逻辑。