使用泛型运行ServiceOperation?

时间:2012-04-05 07:29:12

标签: c# wcf generics delegates

您好,

我有一个带有大量操作的服务器,我需要在客户端的一个特殊方法中包含调用,如果调用失败,它会尝试重新连接。

我的服务操作总是如下:

[MySpecialResponse] MyServiceOperation([MySpecialRequest] request)

我需要一个像这样的方法(Pseudocode):

DoServiceCall<MySpecialResponse>(MyServiceOperation(request));

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

我不确定如何使用泛型,请求帮助。

1 个答案:

答案 0 :(得分: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;
    }
}