0

やあ、

多くの操作を行うサービスがあります。呼び出しが失敗した場合に再接続を試みるクライアント側の特別なメソッド内に呼び出しをラップする必要があります。

私のサービス操作は常に次のようになります。

[MySpecialResponse] MyServiceOperation([MySpecialRequest] request)

そして、次のようなメソッドが必要です(疑似コード):

DoServiceCall<MySpecialResponse>(MyServiceOperation(request));

public T DoServiceCall<T>(ServiceMethod)
{
   return ServiceMethod(request);
}

ジェネリックでこれを行う方法がわかりません。助けてください。

4

1 に答える 1

0

おそらく、あなたは次のようなことをしたいでしょう

public TResult DoServiceCall<T, TResult>(Func(T, TResult) operation, T request)
{
    // Your wrapping here
    return operation(request);
    // and here?
}

したがって、このように使用します。

MySpecialResponse response = DoServiceCall(MyServiveOperation, request)

異なる数のパラメーターを取るサービス操作がある場合は、DoServiceCallそれに応じてオーバーロードする必要があります。

編集

このコンソールアプリを書いて、それが機能することを証明しました

class Program
{
    static void Main()
    {
        Console.WriteLine(DoServiceCall(times2, 5));
        Console.ReadKey();
    }

    public static TResult DoServiceCall<T, TResult>(Func<T, TResult> operation,
                                                    T request)
    {
        return operation(request);
    }

    private static int times2(int x)
    {
        return 2 * x;
    }
}
于 2012-04-05T07:50:25.713 に答える