IDisposable:处置如何与 Autofac 一起使用

IDisposable: How dispose works with Autofac

所以让我们假设我像这样注册了一个对象:

builder.Register<IFoo>().AsSingleInstance<Foo>()

现在假设 Foo 实现 IDisposable:

public class Foo: IDisposable
{
  void Dispose()
  {
    // do something
  };
}

当我在容器的生命周期内调用 Foo.Dispose() 时,它会向 CG 发出清除对象的信号吗?通常 IDisposable 只是作为关于如何处理非托管资源而没有幕后逻辑的一般指南(例如与 using 关键字一起工作除外)?

你有机会读到这篇文章吗https://autofaccn.readthedocs.io/en/latest/lifetime/disposal.html

p.s。我没有足够的声誉,这就是为什么我添加了答案而不是评论问题:)

您不需要实现 IDisposable 接口。 Autofac 可以自动处理一些组件,但您也可以手动指定处理机制。

builder.RegisterType<Foo>()
            .As<IFoo>()
            .InstancePerLifetimeScope();

了解更多信息Autofac Dispose

感谢您的所有回答,但我主要想知道如果有人手动调用容器内的 Dispose 方法,容器和 CG 如何相互交互。通常是关于 IDisposable 如何在幕后工作的解释。

我进一步研究后发现 IDisposable 不以任何方式与容器 or/and CG 交互。因此,如果您在容器内调用对象的 Dispose,只要存在对该对象的引用,它就不会被垃圾回收。所以最后你可以多次调用相同的 Dispose 方法而没有任何问题,无论它是否在容器中并且简单地 Autofac 将再次调用它(你当然可以禁用 autofac 调用 dispose 如果你不想)

感谢您的回答!