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にはWindsorを使用しています。

TaskLogger を IDisposable と宣言し、IDbConnection を破棄する必要がありますか?

4

1 に答える 1

4

いいえ。インスタンスは呼び出し元からクラスに渡されるため、呼び出し元はそれを破棄する責任があります。これは、クラスがこのインスタンスの唯一のコンシューマーであると想定してはならないためです。同じ接続を使用するが、TaskLoggerインスタンスよりも長く存続する別のクラスが存在する可能性があります。

クラスは、それ自体が作成したインスタンスを破棄する必要があります。

別のアプローチは、コンストラクターを追加し、public TaskLogger(IDbConnection dbConnection, bool closeConnection)渡された値が の場合に接続を破棄することですtrue。このアプローチは、一部のSystem.IOクラスで使用されます(ただし、逆の方法で使用しますleaveOpenが、ストリームの場合は別の話です。通常、ストリームは複数のインスタンスで同時に使用されることはないためです)。

于 2013-10-04T11:24:21.520 に答える