我有一个带有几个实现的接口.如果重要的话,实现和接口方法调用位于不同的包中. 我正在try 捕获在方法执行期间可能发生的异常,并在方法调用后用实现名称记录它.在日志(log)中使用实现名称,以区分时间序列.a

try
{
    await _provider.Method();
    //_provider is declared as interface
}
catch (Exception e)
{
    //here I'm planning to log things including implementation that threw the error
    throw;
}

有没有一种方法可以找到执行相关方法的接口实现类,而无需对每个实现的堆栈跟踪或修改方法应用某些正则表达式?

我try 使用反射和方法信息,但只能获得所有实现或仅获得接口信息.

推荐答案

如果您需要获取存储在_provider中的实例的实际类型,只需在其上调用GetType:

try
{
    await _provider.Method();
    //_provider is declared as interface
}
catch (Exception e)
{
   var actualType = _provider.GetType();
   var typeFullName = actualType.FullName; // log the full name
   throw;
}

Csharp相关问答推荐

如何将两个查询结果组合在C#ASP.NET MHC控制器中

为什么.Equals(SS,StringComparison. ClientCultureIgnoreCase)在Net 4.8和6.0之间不同?

总是丢弃返回的任务和使方法puc无效之间有区别吗?

将列表字符串映射为逗号分隔字符串<>

如何在C#中将对象[*,*]直接转换为字符串[*,*]?

如何注册接口类型,类型<>

与C#中的Zip列表并行

C#EF Core 8.0表现与预期不符

如何在Parall.ForEachAsync中使用CancerationTokenSource

需要在重新启动ApplicartionPool或IIS后启动/唤醒API的帮助

TagHelpers在新区域不起作用

HelperText属性不支持复杂内容(混合C#和标记)

在使用StringBuilder时,如何根据 colored颜色 设置为richTextBox中的特定行着色?

为什么我的伺服电机不动,下面的代码?

如何在同一成员上组合[JsonPropertyName]和[ObservableProperty]?

我是否应该注销全局异常处理程序

try 访问字典中的模拟对象时引发KeyNotFoundException

客户端/服务器RPC如何处理全局变量?

将两个JSON文件与覆盖值的主文件合并

是否在异步方法中避免Span<;T>;.ToArray()?