2
|
Vladimir Kovalyuk · 技术社区 · 7 年前 |
1
3
您所看到的简短版本并不是一个bug,您只是误解了生命周期范围和捕获依赖关系的一些细节。 首先,Autofac文档中的一些背景参考:
这些文档中的一些重要要点会直接影响您的情况:
知道了这一点,你就能明白为什么你的单身汉
所以问题是,你如何修复它? 选项1:重新设计
一般来说,最好将单件和您必须通过
例如,假设你有一些
所以,就像
昂贵的
要加速,请使用
反转该关系如下所示:
这样做的想法是,您将解决事务问题,并将单例作为依赖项。较便宜的项目可以很容易地与子生命周期范围一起处理(即,每个请求),但单件将保留。 如果可以的话,最好重新设计,因为即使使用其他选项,您也很难将“每个请求的实例”之类的东西放入一个单独的实例中。(从约束依赖和线程的角度来看,这都是一个坏主意。) 选项2:放弃单身
如果你不能重新设计,一个好的第二选择是让单身汉的一生。。。不要成为单身汉。让它成为每个作用域的实例或每个依赖项的实例,并停止使用
我认识到,由于各种原因,这并不总是可能的。但如果 是 可能,这是另一种逃避问题的方法。
选项3:使用
如果你不能重新设计,你可以将单身者消费的一次性物品注册为
这样做会告诉Autofac不要跟踪一次性产品。你不会有内存泄漏。你
将
负责自行处理已解析的对象。您仍然可以从根生存期范围中获取它们,因为单例将获得
选项4:
如果你不想
总是
手动处置您正在使用的服务-您只想在单例中处理该服务-您可以将其注册为普通服务,但使用
|
erkanozka · Autofac泛型类型注册拦截器并解决它 6 年前 |
ricky · 如何将依赖注入MVVM视图模型类? 6 年前 |
Hamid Lotfy · 在Autofac DI中记录注册的服务 6 年前 |