Unity中的PerThreadLifetimeManager

时间:2010-05-17 00:07:12

标签: c# unity-container threadpool

在Unity PerThreadLifetimeManager文档中,我读到:“此生命周期管理器不会处置它所拥有的实例”。参考:http://msdn.microsoft.com/en-us/library/ff647854.aspx

所以,如果我使用的是ThreadPool,是否意味着在返回到池中之前,在ThreadPool的Thread上使用Unity解析的对象不会在该线程完成的工作结束时处理掉?

任何模式或想法,我如何确保对象确实被处置&我从线程池中得到一个干净的线程?

谢谢!

1 个答案:

答案 0 :(得分:2)

这取决于终身经理的类型。 PerThreadLifetimeManager维护每个线程的单个实例。有六种类型的终身经理,但这并不意味着如果他们不适合你就不能自己做。

好像你想要TransientLifetimeManager每次调用提供一个新实例。您可以在工作线程中调用Resolve,使用实例,并在方法退出之前将其处理掉。

我不确定你是否可以创建一个生命周期管理器,以某种方式自动地知道你的线程已经完成执行。确保发生这种情况的最佳方法是创建一个方法包装器,1)从Unity获取实例(使用TransientLifetimeManager),执行Action< T>。 (您的实际工作者方法)传入实例,然后在退出之前处置该实例。然后,您将通过将代码传递给此包装器来执行您的代码,该包装器在工作线程上运行。您只需编写一次Resolve()和Dispose()代码并在任何地方重复使用。