所以我们假设我注册了一个这样的对象。
builder.Register<IFoo>().AsSingleInstance<Foo>()
现在我们假设 Foo
实施 IDisposable
:
public class Foo: IDisposable
{
void Dispose()
{
// do something
};
}
当我打电话 Foo.Dispose()
在容器的生命周期内,它是否会向CG发出信号来清理对象?一般来说,IDisposable是否只是作为处理非管理资源的一般准则而存在,而没有任何幕后逻辑(除了例如与 using
关键字)?)
你是否有机会读过这个 https:/autofaccn.readthedocs.ioenlatestlifetimedisposal.html。 ?
p.s. 我没有足够的信誉,所以我加了答案而不是评论问题:)
你不需要实现 IDisposable
接口.Autofac可以自动处理一些组件,但您也可以手动指定处理机制。
builder.RegisterType<Foo>()
.As<IFoo>()
.InstancePerLifetimeScope();
更多信息 自动处理
谢谢大家的回答,但我主要想知道的是,如果有人手动调用了 Dispose
容器内的方法。一般是解释一下IDisposable在幕后的工作原理。
我再研究了一下,发现的是 IDisposable
不以任何方式与容器或CG交互。所以如果你调用 Dispose
容器内的一个对象的引用,只要有对该对象的引用,就不会被垃圾回收。所以最后,你可以多次调用相同的 Dispose
方法没有任何问题,无论它是否在一个容器中,只需用 Autofac
将会再次调用它(当然,如果你不想的话,你也可以禁止autofac调用dispose)。
谢谢你的回答!