0

我在注入控制器的类中有一些非托管资源,一旦控制器被释放,我需要释放这些资源(否则我会出现内存泄漏)。我查看了 IUnityContainer 并没有找到允许我这样做的 Release (或类似)方法。

经过一些试验和错误(和阅读),在我看来,Unity 并没有跟踪它创建的类型的情况。这与 Windsor 不同,我可以调用 Release,整个对象图将被释放。这实际上是首先拥有容器的要点之一(对象生命周期管理)。我不需要直接调用 Dispose,容器应该能够以正确的顺序/对象为我执行此操作。

所以,我的问题是,我怎样才能告诉 Unity 不再需要某个对象并且应该处置该对象?

如果没有办法做到这一点,有没有办法将生命周期更改为每个 Web 请求?

请注意,更改容器不是一种选择。很遗憾 :(

4

1 回答 1

0

您将不得不查看 Unity 中不同的生命周期管理器。ContainerControlledLifetimeManager 将对它创建的每个项目调用 dispose。不幸的是,此管理器充当已解析对象的单例,因此可能不适合您。

另一种选择是创建您自己的生命周期管理器,该管理器跟踪它创建的对象,并且在处置容器时仅处置每个对象。

于 2012-12-12T22:10:44.287 回答