我有一个线程安全对象,创建该对象很昂贵,并且需要通过我的应用程序(Lucene.Net IndexReader)来使用。

该对象可能变得无效,这时我需要重新创建它(IndexReader.IsCurrent为false,需要使用IndexReader.Reopen的新实例)。

我希望能够使用IoC容器(StructureMap)来管理对象的创建,但是如果可行,我将无法解决。感觉就像某种“条件单例”生命周期。

StructureMap是否提供这种功能?
还有其他建议吗?

最佳答案

我可能会使用PerRequest的范围,而不直接返回IndexReader。相反,我将返回IndexReader的抽象,它将对类级别上保存的静态引用执行检查。

然后,当访问shim/proxy/abstraction上的属性时,它将检查静态引用(当然,将其设为线程安全的),并在需要时重新获取IndexReader,然后再将其传递回用户。

10-07 19:04