次のようなコードがたくさんあります。
public class MyWcfService : IMySerciceContract, IDisposable
{
private DatabaseOperations _dataAccess;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
_dataAccess.Dispose();
}
}
クラス MyWcfService が IIS または WAS でホストされ、明示的に Dispose を呼び出すことはありません。私の考えでは、このクラスに IDisposable を実装させるのは無意味であり、_dataAccess の使用を using ステートメントでラップする方がよいでしょう。私が理解しているように、IDisposable を実装するクラスの期待は、そのクラスのユーザーが using ブロック宣言でインスタンス化することです。Dispose を明示的に呼び出すユーザーがいないことを考えると、上記の例は悪い習慣ですか? 上記の例のようにクリーンアップを GC に依存している場合、GC は Dispose を呼び出しますか、それとも単にファイナライザーを呼び出しますか?