gpt4 book ai didi

C# 在继承的构造函数中初始化 Disposable

转载 作者:行者123 更新时间:2023-12-05 09:26:40 24 4
gpt4 key购买 nike

嘿,所以我有一个来自第 3 方 dll 的基类,它依赖于一次性的。 上下文:IDisposable

public class BaseValidator
{
public BaseValidator(Context context) {}
}

我们正在努力摆脱将我们的类与这些依赖关系捆绑在一起的做法。所以我们开始依赖供应商

public interface IContextProvider 
{
Context Create();
}

我正在编写一个新的验证器,它继承自 BaseValidator,但我希望它依赖于 IContextProvider。所以我想在继承的构造函数中创建上下文,但我想在析构函数中处理它以防止内存泄漏,但是我不确定这是否可能。

public class EntityValidator: BaseValidator 
{
public EntityValidator(IContextProvider provider) : base(provider.Create())
{
}

~EntityValidator()
{
//I'm not how I can dispose the entity I've passed into it.
}
}

我的问题是,有什么技巧可以用来捕获传递到基数中的变量吗?

注意:我知道我可以使用外部帮助类来解决问题,但如果有人知道如何以更明智的方式做到这一点,我很感兴趣。

最佳答案

如果 BaseValidator 类不以公开方式公开 Context,您当前的设计将需要您使用反射和了解 BaseValidator< 的内部实现 处理它,这当然是脆弱的。

我会使用中间构造函数来捕获上下文:

Context _context;
private EntityValidator(Context context) : base(context)
{
_context = context;
}
public EntityValidator(IContextProvider provider) : this(provider.Create())
{

}

请注意,通过终结器(也称为析构函数)进行处理并不理想 due to constraints它放在垃圾收集器上。我宁愿让 EntityValidator 实现 IDisposable

关于C# 在继承的构造函数中初始化 Disposable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73626682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com