MAUI中MetroLog自定义ILogger扩展方法无法调用问题
问题:MAUI中ILogger无法调用自定义扩展方法LogErrorAndNotifyUser
我正在开发MAUI应用,已集成MetroLog日志库,尝试为ILogger创建自定义扩展方法LogErrorAndNotifyUser,代码如下:
public static class LoggerCustomExtensions { public static void LogErrorAndNotifyUser(this ILogger logger, string? message, params object?[] args) { logger.Log(LogLevel.Error, message!, args!); ShowErrorMessage(); } }
随后在其他类中通过依赖注入获取ILogger<MyClass>实例:
private readonly ILogger<MyClass> _logger; public MyClass(ILogger<MyClass> logger) { _logger = logger; }
但调用该扩展方法_logger.LogErrorAndNotifyUser("Failed to read items {0}. Error: {1}", ex.Message);时,方法不可见,请问问题出在哪里?
核心原因及解决办法
未引用扩展方法所在的命名空间
自定义扩展方法LoggerCustomExtensions类属于特定命名空间,必须在调用该方法的MyClass所在文件顶部添加对应的using语句,否则编译器无法识别该扩展方法。
示例:假设扩展类在MyApp.Logging.Extensions命名空间下,需添加:using MyApp.Logging.Extensions;ILogger接口类型冲突
MetroLog和Microsoft.Extensions.Logging都定义了ILogger接口:- 若你的扩展方法引用的是
MetroLog.ILogger,但依赖注入获取的ILogger<MyClass>是MAUI默认提供的Microsoft.Extensions.Logging.ILogger<TCategoryName>,二者属于不同类型,导致扩展方法无法匹配。 - 解决:统一接口类型,要么修改扩展方法的
ILogger为Microsoft.Extensions.Logging.ILogger,要么配置DI容器注入MetroLog的ILogger实例。
- 若你的扩展方法引用的是
程序集引用缺失
如果扩展方法所在的类在单独的类库项目中,需确保调用代码的MAUI项目已正确引用该类库,否则编译器无法找到扩展方法定义。
内容的提问来源于stack exchange,提问作者Val
相关产品推荐
相关产品推荐

