使用Ninject,我如何使用当前范围内的对象来确定它是否仍在范围内?

时间:2012-07-06 08:54:56

标签: ninject

我有一个场景,只要一个对象返回true,多个并发Web请求就应该重用一个对象。有问题的对象是线程安全的。

所以我需要当前在范围内的对象来确定它是否仍在范围内。使用Ninject实现这一目标的最佳方法是什么?

虽然可能不需要回答这个问题,但目标是在基础索引未被更改时重用Lucene IndexSearcher / IndexReader。 Reader有一个方法IsCurrent,如果索引被更改,则返回false。

2 个答案:

答案 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());

并在提供者中应用您的重新创建逻辑。