Dav*_*d W 10 .net c# delegates
我们正在使用IoC并使用它暴露我们的日志.我们正在使用Common.Logging并且我已经编写了一个匹配的委托,Common.Logging.FormatMessageHandler但我不知道如何将该委托的版本转换为Common.Loggingapi期望的版本.
这个问题看起来很相似,但我不明白如何从我实现的类型转换为我想要调用的已知类型. 动态地将一种类型的委托转换为另一种委托
这是我的代表签名:
public delegate string FormatMessageHandler(string format, params object[] args)
Run Code Online (Sandbox Code Playgroud)
这是Common.Logging的:
public delegate string FormatMessageHandler(string format, params object[] args)
Run Code Online (Sandbox Code Playgroud)
相同的名称(不重要)和相同数量的参数.两者在编译时都是已知的,所以它应该是显而易见的但我没有看到它.
如果它完全相同,为什么你不首先使用Common.Logging的委托?
但是,解决问题的方法是使用您提到的问题中链接的文章中解释的动态强制转换,或者您这样做:
YourNamespace.FormatMessageHandler yourHandler = ...;
Common.Logging.FormatMessageHandler handler = (f, a) => yourHandler(f, a);
Run Code Online (Sandbox Code Playgroud)
更新:
根据你的评论,你想要这样的东西:
public void Error(Action<Your.FormatMessageHandler> formatMessageCallback)
{
_logger.Error(h => formatMessageCallback((f, a) => h(f, a)));
}
Run Code Online (Sandbox Code Playgroud)
这将创建一个带有一个h类型参数的新操作,该参数使用一个新的委托Common.Logging.FormatMessageHandler来调用所提供的操作formatMessageCallback,该委托Your.FormatMessageHandler接受两个参数f和a.这个新代表依次调用h两个提供的参数.
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |