IDisposable: 如何使用Autofac进行处置

问题描述 投票:0回答:1

所以我们假设我注册了一个这样的对象。

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

现在我们假设 Foo 实施 IDisposable:

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

当我打电话 Foo.Dispose() 在容器的生命周期内,它是否会向CG发出信号来清理对象?一般来说,IDisposable是否只是作为处理非管理资源的一般准则而存在,而没有任何幕后逻辑(除了例如与 using 关键字)?)

c# garbage-collection dispose
1个回答
0
投票

你是否有机会读过这个 https:/autofaccn.readthedocs.ioenlatestlifetimedisposal.html。 ?

p.s. 我没有足够的信誉,所以我加了答案而不是评论问题:)


0
投票

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

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

更多信息 自动处理


0
投票

谢谢大家的回答,但我主要想知道的是,如果有人手动调用了 Dispose 容器内的方法。一般是解释一下IDisposable在幕后的工作原理。

我再研究了一下,发现的是 IDisposable 不以任何方式与容器或CG交互。所以如果你调用 Dispose 容器内的一个对象的引用,只要有对该对象的引用,就不会被垃圾回收。所以最后,你可以多次调用相同的 Dispose 方法没有任何问题,无论它是否在一个容器中,只需用 Autofac 将会再次调用它(当然,如果你不想的话,你也可以禁止autofac调用dispose)。

谢谢你的回答!

© www.soinside.com 2019 - 2024. All rights reserved.