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



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

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

虽然可能不需要回答这个问题,但目标是在底层索引尚未更改的情况下重用Lucene IndexSearcher/IndexReader。读取器有一个方法 IsCurrent,如果索引已更改,则返回 false。

Hy, 您可以定义自己的范围对象。只要 scope 对象处于活动状态且未更改,ninject 就会返回绑定类型的相同实例。自定义范围需要检查 IsCurrent 是否返回 false。您可以查看如何在https://github.com/ninject/ninject.extensions.namedscope/tree/master/src/Ninject.Extensions.NamedScope。请注意,在开发自己的作用域时,必须注意不要创建永远不会为 GC 发布的对象!

对我来说,实现您想要的最佳方法是使用提供程序:

Bind<ILuceneIndex>().ToProvider(new LuceneIndexProvider());

并在提供程序中应用重新创建的逻辑。

最新更新