这是我的班级:
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声明为IDisposable,并处理IDbConnection?
答案 0 :(得分:3)
没有。由于实例从调用者传递给您的类,调用者负责处理它。这是因为您的类不应该假设它是此实例的唯一使用者 - 可能有另一个类使用相同的连接但是比您的TaskLogger
实例更长。
你的班级应该处理它自己创建的实例。
另一种方法是添加构造函数public TaskLogger(IDbConnection dbConnection, bool closeConnection)
并在传入的值为true
时处置连接。这种方法由some System.IO
classes使用(虽然他们反过来并使用leaveOpen
- 但对于流而言它是一个不同的故事,因为通常多个实例不会同时使用流)。