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 如果你不想)
感谢您的回答!
所以让我们假设我像这样注册了一个对象:
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 如果你不想)
感谢您的回答!