Konvertieren von einem Delegaten zu einem anderen. Pseudo-Besetzung

9

Wir verwenden IoC und lassen unser Logging damit offen legen. Wir verwenden Common.Logging und ich habe einen passenden Delegaten für Common.Logging.FormatMessageHandler geschrieben, aber ich weiß nicht, wie man von unserer Version dieses Delegaten in den konvertiert, den die Common.Logging api erwartet.

Diese Frage scheint ähnlich zu sein, aber ich verstehe nicht, wie ich meinen implementierten Typ in den bekannten Typ umwandeln kann, den ich aufrufen möchte. Dynamische Umsetzung eines Delegattyps in einen anderen

Hier ist meine Delegiertensignatur:

%Vor%

Hier ist Common.Logging's:

%Vor%

Gleicher Name (nicht wichtig) und gleiche Anzahl von Parametern. Beide sind zur Kompilierungszeit bekannt, also sollte es etwas Offensichtliches sein, aber ich sehe es nicht.

    
David W 05.07.2011, 21:15
quelle

2 Antworten

8

Warum verwenden Sie den Delegaten von Common.Logging nicht in erster Linie, wenn er genau gleich ist?
Eine Lösung für Ihr Problem ist jedoch, dass Sie entweder die in dem von Ihnen erwähnten Frage verknüpften Artikel erläuterte dynamische Besetzung verwenden, oder Sie tun es wie folgt:

%Vor%

UPDATE:
Laut deinem Kommentar willst du so etwas:

%Vor%

Dies erstellt eine neue Aktion mit einem Parameter h vom Typ Common.Logging.FormatMessageHandler , der die angegebene Aktion formatMessageCallback mit einem neuen Delegaten von Your.FormatMessageHandler aufruft, der zwei Parameter f und a akzeptiert. Dieser neue Delegat ruft wiederum h mit den zwei angegebenen Parametern auf.

    
Daniel Hilgarth 05.07.2011, 21:22
quelle
1

Manuell kann man das machen, aber es ist so teuer wie die Reflexion bei der Konvertierung. Sobald der Delegat konvertiert ist, verhält er sich im Grunde gleich ...

%Vor%     
csharptest.net 05.07.2011 23:19
quelle

Tags und Links