Autofac OnRelease()未被调用

时间:2012-04-25 14:32:11

标签: autofac

我有一个类Foo,它用于配置容器,并用作另一个类Bar的工厂,它用作Windows服务的入口点。

Bar类注入了一个Baz实例,它打开了一个套接字连接。

在Foo中,IBaz配置了一个OnActivated()来打开连接,一个OnRelease()来关闭连接。

验收测试使用Foo创建Bar并验证一些预期结果。问题是测试永远不会完成,因为Baz连接永远不会被关闭。这是因为OnRelease()从未被调用过。

我的理解是,一旦Foo超出范围并被垃圾收集,容器应该调用OnRelease()委托。

为什么不会发生这种情况?

1 个答案:

答案 0 :(得分:2)

您需要使用生命周期范围来控制组件的释放。 Autofac中的终身管理始终是明确的,并且不依赖于GC。

在这种情况下,可能是容器本身扮演这个角色 - 处置容器会导致OnRelease方法被调用。这是一个很长的阅读,但this涵盖了细节。