1

这是我的课:

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?

4

1 回答 1

4

不。由于实例是从调用者传递给您的类的,因此调用者负责处理它。这是因为你的类不应该假设它是这个实例的唯一消费者 - 可能有另一个类使用相同的连接但比你的TaskLogger实例寿命更长。

你的类应该处理它自己创建的实例。

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

于 2013-10-04T11:24:21.520 回答