2

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

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

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

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

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

为什么这不会发生?

4

1 回答 1

2

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

在这种情况下,可能是容器本身扮演了这个角色——处理容器会导致OnRelease方法被调用。读起来有点长,但这涵盖了细节。

于 2012-04-26T13:22:29.463 回答