我的组件具有 IDisposable 构造函数依赖项是否是 IDisposable

本文关键字:IDisposable 函数依赖 是否是 我的 组件 | 更新日期: 2023-09-27 18:33:58

这是我的类:

public class TaskLogger : ITaskLogger
{
    private readonly IDbConnection _dbConnection;
    public TaskLogger(IDbConnection dbConnection)
    {
        _dbConnection = dbConnection;
    }
    public void LogTask(int clientId, string taskName)
    {
        _dbConnection.Execute("insert blah",{clientId,taskName}});
    }
}

我们使用温莎进行DI。

是否应该声明 TaskLogger 是可处理的,并释放 IDbConnection?

我的组件具有 IDisposable 构造函数依赖项是否是 IDisposable

No.由于实例是从调用方传递给类的,因此调用方负责释放它。这是因为您的类不应假定它是此实例的唯一使用者 - 可能有另一个类使用相同的连接,但生存时间比您的TaskLogger实例更长。

您的类应该释放它自己创建的实例。

另一种方法是添加一个构造函数public TaskLogger(IDbConnection dbConnection, bool closeConnection)并在传入的值true时释放连接。这种方法被一些System.IO类使用(尽管它们以相反的方式使用它并使用leaveOpen - 但对于流来说,这是一个不同的故事,因为通常一个流不会同时被多个实例使用)。