32

したがって、WCF サービスから公開されているメソッドがあります。

public GetAllCommentsResponse GetAllComments(GetAllCommentsRequest request)
{
    var response = new GetAllCommentsResponse();

    using(_unitOfWork)
        try
        {
            Guard.ArgNotNull(request, "request");

            var results = _unitOfWork.CommentRepository.Get(d => d.Id > 0).ToArray();

            //... Do rest of stuff here
        }
        catch (Exception ex)
        {
            response.Success = false;
            response.FailureInformation = ex.Message;
            Logger.LogError("GetAllComments Method Failed", ex);
        }

    return response;
}

サービス呼び出しが発生したときにコンストラクター引数を介してNinjectによってインスタンス化されるグローバルDataUnitOfWorkオブジェクト(IDisposableを実装)があります。デバッグ時に、使用する場合

using(_unitOfWork)

_unitOfWork オブジェクトは、スコープから出た直後に破棄され、Ninject によって再度呼び出されます (ただし、破棄済みとしてマークされているため、何も起こりません)。using ステートメントがなければ、Ninject が破棄を処理します。

簡単に言えば、これには一般的な経験則がありますか?私が読んだすべてがそれを決して使用しないこと、または特定の折衷的な状況でそれを使用することを示しているように見えた後、私はIDisposable全体を怖がっていましたが、それはいつも私を混乱させます.

どんな入力でも大歓迎です。

ああ、とにかくここで入力している間に、なぜ廃棄時に GC.SuppressFinalize() への呼び出しがあるのでしょうか? Dispose と Finalize の違いは何ですか?

4

1 に答える 1