使用 DI 将 BLoC 作为单例注入的效果以及在哪里关闭流?

Posted

技术标签:

【中文标题】使用 DI 将 BLoC 作为单例注入的效果以及在哪里关闭流?【英文标题】:Effects of Injecting BLoC as a singleton using DI and where to close stream? 【发布时间】:2020-02-26 21:19:35 【问题描述】:

我正在使用 inject.dart 将我的 bloc 作为单例注入,这是一种不好的做法,即导致内存泄漏?

由于我使用的所有流都是来自 RxDart 的广播流,我想知道单例是否会更好?

如果不是一个坏习惯,关闭流的最佳位置是什么? 在有状态小部件(订阅 bloc)的 Dispose() 中执行此操作会导致问题,因为其他小部件可能仍在使用流?

【问题讨论】:

【参考方案1】:

您不应该使用单例,因为它会消耗太多内存。而是将 bloc 注册为工厂类。

查看这个 github 问题 - https://github.com/felangel/bloc/issues/711

如果您在处置 bloc 后将它们注册为单例,则无法再次使用该 bloc,但如果您注册为工厂,则可以在小部件的 void dispose()... 方法中处置它。

【讨论】:

以上是关于使用 DI 将 BLoC 作为单例注入的效果以及在哪里关闭流?的主要内容,如果未能解决你的问题,请参考以下文章

说一说你对Spring IoC的理解

说一说你对Spring IoC的理解

说一说你对Spring IoC的理解

说一说你对Spring IoC的理解

依赖注入[6]: .NET Core DI编程体验

在没有DI框架的情况下注入存储库