我的组件具有 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?
No.由于实例是从调用方传递给类的,因此调用方负责释放它。这是因为您的类不应假定它是此实例的唯一使用者 - 可能有另一个类使用相同的连接,但生存时间比您的TaskLogger
实例更长。
您的类应该释放它自己创建的实例。
另一种方法是添加一个构造函数public TaskLogger(IDbConnection dbConnection, bool closeConnection)
并在传入的值true
时释放连接。这种方法被一些System.IO
类使用(尽管它们以相反的方式使用它并使用leaveOpen
- 但对于流来说,这是一个不同的故事,因为通常一个流不会同时被多个实例使用)。