You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MvvmCross 7.0.0 WPF项目依赖注入无法解析ILogger类型问题求助

解决MvvmCross 7.0.0中注入ILogger失败的问题

这个问题的核心原因很明确——MvvmCross的默认IoC容器并没有自动注册.NET标准库中的ILogger接口,而你之前熟悉的Blazor是基于ASP.NET Core生态的,它的DI系统会自动配置并注册日志相关服务,所以不用手动处理。

下面给你两种可行的解决方案:

方案1:改用MvvmCross自带的日志体系(推荐)

MvvmCross本身有一套成熟的日志框架,默认已经完成了IoC注册,直接用它最省心。你只需要修改TestService的构造函数依赖,替换成MvvmCross的IMvxLog接口:

using MvvmCross.Logging;

public class TestService : ITestService
{
    private readonly IMvxLog _logger;

    // 依赖IMvxLog而非ILogger
    public TestService(IMvxLog logger)
    {
        _logger = logger;
    }

    public string Run()
    {
        // 使用MvvmCross的日志方法
        _logger.Info("Run");
        return "HelloWorldFROMrUN!";
    }
}

修改后,你的原有注册代码不需要任何改动,直接运行就能正常解析——因为MvvmCross在初始化时已经自动注册了IMvxLog的实现,会自动注入到TestService中。

方案2:手动注册.NET的ILogger到MvvmCross IoC

如果你坚持要使用.NET标准的ILogger,那需要手动在MvvmCross的IoC容器中注册日志工厂和对应的ILogger实例/泛型类型。

在Core项目的App类的Initialize方法中,先配置并注册ILoggerFactory,再注册ILogger相关类型:

using Microsoft.Extensions.Logging;

public override void Initialize()
{
    // 1. 创建并注册日志工厂
    var loggerFactory = LoggerFactory.Create(builder =>
    {
        // 根据你的需求添加日志输出目标,比如Debug窗口、控制台等
        builder.AddDebug();
        // 如果是带控制台的WPF项目,可以加上这句
        // builder.AddConsole();
    });
    Mvx.IoCProvider.RegisterSingleton(loggerFactory);

    // 2. 注册泛型的ILogger<T>(这样任何依赖ILogger<T>的类都能被解析)
    Mvx.IoCProvider.RegisterSingleton(typeof(ILogger<>), typeof(Logger<>));

    // 3. 注册你的业务服务
    Mvx.IoCProvider.RegisterType<ITestService, TestService>();

    // 现在解析服务就不会报错了
    var testService = Mvx.IoCProvider.Resolve<ITestService>();

    base.Initialize();
}

这样配置后,MvvmCross的IoC容器就能找到ILogger的实现,成功注入到TestService中。

为什么Blazor中不需要这么做?

Blazor是ASP.NET Core生态的一部分,当你创建Blazor项目时,模板已经自动在Program.cs中配置了日志服务(比如builder.Logging.AddConsole()),ASP.NET Core的DI系统会自动注册ILogger、ILoggerFactory等相关类型,所以注入时不需要手动处理。而MvvmCross是独立的MVVM框架,它的IoC容器不会自动包含这些ASP.NET Core专属的服务,因此需要手动注册。

内容的提问来源于stack exchange,提问作者Yong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 23:12:34