假设我有以下C#类ClassA
:
public class ClassA
{
private readonly ClassB _b;
public ClassA(ClassB b)
{
_b = b;
}
}
此类包含对ClassB
的实例的引用,该实例实现IDisposable:
public class ClassB : IDisposable
{
public void Dispose()
{
// dispose
}
}
现在,我通过依赖项注入将ClassA
注册为服务,并创建ClassB
的实例并将其传递给它:
services.AddSingleton(service => new ClassA(new ClassB()));
在服务的生命周期结束时,是否调用了类B的Dispose()
方法?根据this stackoverflow post regarding the disposal of singleton instances,如果ClassA
也将实现IDisposable
,那么ClassA
的Dispose()
方法也将被调用.我是否也要为ClassA
实现接口,并在ClassA
的Dispose()
中调用ClassB
的Dispose()
?或者,我能以某种方式确保在ClassA
中不实现IDisposable
的情况下调用ClassB
的Dispose()
方法吗?
编辑:我将菲利普·斯图克的答案标记为正确,因为它似乎为这个问题推荐了最简单的解决方案.关于我的第Is the 101 method of 102 ever called?个问题,我认为下面的讨论清楚地表明它不是被要求的.相反,GC通过调用ClassB
的实例上的Finalize method instead of the Dispose method来清理它.