我有一个场景,只要一个对象上的方法返回 true,多个并发 Web 请求就应该重用一个对象。有问题的对象是线程安全的。
所以我需要当前范围内的对象来确定它是否仍在范围内。使用 Ninject 完成此任务的最佳方法是什么?
虽然可能不需要回答这个问题,但目标是在未更改基础索引的情况下重用 Lucene IndexSearcher / IndexReader。Reader 有一个 IsCurrent 方法,如果索引已更改,则该方法返回 false。
我有一个场景,只要一个对象上的方法返回 true,多个并发 Web 请求就应该重用一个对象。有问题的对象是线程安全的。
所以我需要当前范围内的对象来确定它是否仍在范围内。使用 Ninject 完成此任务的最佳方法是什么?
虽然可能不需要回答这个问题,但目标是在未更改基础索引的情况下重用 Lucene IndexSearcher / IndexReader。Reader 有一个 IsCurrent 方法,如果索引已更改,则该方法返回 false。
Hy,您可以定义自己的范围对象。只要作用域对象是活动的并且没有改变,ninject 就会返回绑定类型的相同实例。自定义范围需要检查 IsCurrent 是否返回 false。您可以在https://github.com/ninject/ninject.extensions.namedscope/tree/master/src/Ninject.Extensions.NamedScope中查看如何实现自定义范围 。请注意,当您开发自己的范围时,您必须注意不要创建永远不会为 GC 释放的对象!
为了对我来说最好的实现你想要的是使用提供者:
Bind<ILuceneIndex>().ToProvider(new LuceneIndexProvider());
并在提供程序中应用您的重新创建逻辑。