2012-04-05 4 views
0

Salut,Exécutez ServiceOperation avec des génériques?

J'ai un Sevice avec beaucoup d'opérations, je dois WRAPP l'appel intérieur d'une méthode spéciale du côté client qui tente de se reconnecter si l'appel échoue.

Mes serviceoperations ne regarde toujours comme ça:

[MySpecialResponse] MyServiceOperation([MySpecialRequest] request) 

Et je besoin d'une méthode comme celui-ci (pseudocode):

DoServiceCall<MySpecialResponse>(MyServiceOperation(request)); 

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

Je ne suis pas sûr de savoir comment faire cela avec les génériques, les plaidoyers de l'aide.

+0

doesen't son qui me générique – Jodrell

+0

D'accord, mais comment pourrais-je le résoudre? Tout ce dont j'ai besoin est d'emballer l'appel de service à beable pour gérer les problèmes de communication. Ce serait génial si je pouvais éviter d'ajouter de la logique à tous mes ServiceAgents. – Banshee

+0

Quelle gamme de types MyServiceOperation renvoie-t-il? – Jodrell

Répondre

0

Peut-être que vous voulez faire somthing comme

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

Alors, vous l'utiliser comme ceci.

MySpecialResponse response = DoServiceCall(MyServiveOperation, request) 

Si vous avez des opérations de service qui prennent un certain nombre de paramètres différents, vous devez surcharger DoServiceCall en conséquence.

EDIT

j'ai écrit cette application console pour prouver qu'il fonctionne

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; 
    } 
} 
+0

Veuillez préciser les informations dont vous avez besoin. J'ai essayé de copier/coller votre solution mais elle ne fonctionne pas, elle se plaint de L'utilisation du type générique 'System.Func ' nécessite 1 type arguments. – Banshee

+0

Im utilisant .net 4.0. J'ai essayé ceci> public R Exécuter (ce client T, Func serviceFunc) où T: My.ServiceContracts.IMyClientService et cette tête de méthode fonctionne très bien. – Banshee

+0

Programme de test ajouté – Jodrell

Questions connexes