我的具有IDisposable构造函数依赖关系的组件应该是IDisposable吗?

时间:2013-10-04 11:23:05

标签: c# .net castle-windsor

这是我的班级:

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?

1 个答案:

答案 0 :(得分:3)

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

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

另一种方法是添加构造函数public TaskLogger(IDbConnection dbConnection, bool closeConnection)并在传入的值为true时处置连接。这种方法由some System.IO classes使用(虽然他们反过来并使用leaveOpen - 但对于流而言它是一个不同的故事,因为通常多个实例不会同时使用流)。