我确实有一个架构问题(而且我对 Castle Windsor 不是很熟悉,它被用作我的应用程序的容器)。
我有一个实现工作单元设计模式的 Web 应用程序。 UnitOfWork实现了IDisposable接口。
我认为在UnitOfWork的Dispose方法中执行的操作没有特别的原因(这些操作在早些时候的某个时候已经完成)。
此外,我所有的组件都是使用瞬态生命周期实例化的。
几乎所有组件都在使用存储库实例,它也是瞬态的并且还实现了IDisposable(同样,没有特别的原因)。
此外,大多数这些组件也被一些桌面应用程序使用。
我遇到的问题是由于实现IDisposable的瞬态组件导致的内存泄漏,正如我在此处阅读的那样:http: //nexussharp.wordpress.com/2012/04/21/castle-windsor-avoid-memory-leaks-by-learning -底层机械师/。
我还注意到Dispose从未调用过任何方式,无论是从 Web 应用程序还是从客户端应用程序(实际上发现在组件上调用Release时会调用它的更多帖子)。
解决内存泄漏问题的一种选择(并且不使用NoTrackReleasePolicy!)实际上是删除IDisposable的实现。但我想这类似于指定 NoTrackReleasePolicy,这可能会导致比内存泄漏更大的问题(尽管我不知道如何?) - 所以这是我的第一个问题。
我还尝试指定PerWebRequest而不是Transient,但是在这种情况下,桌面应用程序的组件的行为会如何,因为没有 web request\context ?这是我的第二个问题。
我不想考虑的另一件事是为我解决的每个组件手动调用 release ...
任何以最安全\优雅\更改较少的方式解决问题的想法将不胜感激......