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:
Hier ist Common.Logging's:
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.
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:
UPDATE:
Laut deinem Kommentar willst du so etwas:
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.
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%