从Autofac的文档中,我了解到它会引用它创建的每个IDisposable实现者。因此它可能导致OutOfMemoryException。因此,建议的解决依赖关系的方法是使用ILifetimeScope。
假设IService实现了IDisposable。
class MaintenanceTask {
private IService service;
public MaintenanceTask(ILifetimeScope lifetimeScope) {
service = lifetimeScope.Resolve<IService>();
}
//...do your work
}
但这种方法的问题在于它隐藏了依赖关系。我必须查看代码以了解该类所依赖的内容。还有其他方法可以更明确地处理这个问题吗?更具体地说,在不必查看代码的情况下使依赖关系变得更加明显?还是我完全弄错了?
答案 0 :(得分:6)
传入生命周期范围就像传入容器本身一样。它类似于Service locator (anti-) pattern,并且确实存在您所描述的问题:
依赖变得不明显。
有一件事要问自己:
你真的遇到了记忆问题吗?如果没有,我不会打扰。
另一个指针:
如果您有单独的服务应该在使用后立即处理,请使用工厂创建它们,并使您的课程取决于工厂而不是服务本身。
生命范围的使用场景略有不同:
当您需要本地组合根时使用它们。我从来没有在Windows应用程序中需要这样的东西,但在Web应用程序中,会话或请求可能需要本地组合根。
答案 1 :(得分:0)
这个问题对我来说很烦人,我创建了一个库来解决它。
看看Dependable。
使用它,您的代码将更改为:
<div class="container-logos">
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
<div class="logo"></div>
</div>