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 回答