J'ai une application héritée qui enregistre les entrées/sorties de services. Actuellement, chaque méthode a les mêmes lignes pour consigner les objets de demande et de réponse. Je voudrais utiliser AOP, mais sans ajouter d'outil supplémentaire (Postsharp, Castle, etc), ou envelopper chaque classe de service dans une autre classe (ServiceWrapper). Pour ce faire, j'essaie de créer une classe Generic qui sait qu'elle doit enregistrer les objets de requête et de réponse. Voilà ce que je suis en train:Le paramètre C# func n'est pas utilisé
using System;
namespace ProxyTest
{
class Program
{
static void Main(string[] args)
{
var request = "request";
var fooService = new FooService();
ServiceProxy.Invoke(r => fooService.DoFoo(request), "abc");
Console.Read();
}
}
class ServiceProxy
{
public static void Invoke(Func<object, object> service, object request)
{
Console.WriteLine("input:" + request);
var response = service(request);
Console.WriteLine("output:" + response);
}
}
class FooService
{
public string DoFoo(object a)
{
return a + ": returning: Do Foo";
}
}
}
Bien qu'il fonctionne, la chaîne « abc » est juste pour compiler l'application, mais il n'est pas utilisé comme paramètre de demande. Si je supprime cela, le code ne compile pas. Est-ce que je manque quelque chose?
MISE À JOUR
Changement au suivant a fait l'affaire:
static void Main(string[] args)
{
var request = "request";
var fooService = new FooService();
ServiceProxy.Invoke(r => fooService.DoFoo(r), request);
Console.Read();
}
Avez-vous accès à une source de services? Est-ce le service WCF? – eocron
"mais il n'est pas utilisé comme paramètre de requête" - c'est pour le moment dans ServiceProxy.Invoke. Ce n'est pas clair pour moi ce que vous demandez ici ... –
Pourquoi ne pas l'appeler comme ceci 'ServiceProxy.Invoke (r => fooService.DoFoo (r), demande);' ou juste 'ServiceProxy.Invoke (fooService.DoFoo , request); ' – juharr