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

如何用FreshMvvm和FreshIOC注入AutoMapper实例及解决注入崩溃问题

解决Xamarin.Forms + FreshMvvm中AutoMapper注入崩溃的问题

看起来你遇到的核心问题是AutoMapper相关服务没有正确注册到FreshMvvm依赖的TinyIoC容器中,导致解析IConfigurationProvider时失败。FreshMvvm默认用TinyIoC做DI管理,和普通.NET Core DI的注册逻辑略有差异,下面是具体的解决步骤:

1. 先确认AutoMapper配置的正确性

先创建你的AutoMapper配置文件(Profile),把映射规则统一管理起来:

public class AppMappingProfile : Profile
{
    public AppMappingProfile()
    {
        // 示例:添加你的实体映射规则
        CreateMap<UserDto, UserModel>();
        CreateMap<OrderEntity, OrderViewModel>();
    }
}

2. 正确注册AutoMapper服务到TinyIoC

在App.xaml.cs的OnStart方法中,一定要在FreshMvvm解析ViewModel之前完成AutoMapper的初始化和容器注册:

protected override void OnStart()
{
    // 1. 初始化AutoMapper全局配置
    var mapperConfig = new MapperConfiguration(cfg =>
    {
        cfg.AddProfile<AppMappingProfile>();
        // 也可以直接在这里添加映射规则,用Profile类管理更清晰
    });

    // 可选但推荐:验证配置是否正确,提前排查映射错误
    mapperConfig.AssertConfigurationIsValid();

    // 2. 注册到TinyIoC容器
    // 把IConfigurationProvider注册为单例(配置全局唯一)
    TinyIoCContainer.Current.Register<IConfigurationProvider>(mapperConfig);
    // 注册IMapper,通过工厂方法创建,确保它能拿到依赖的IConfigurationProvider
    TinyIoCContainer.Current.Register<IMapper>(() => mapperConfig.CreateMapper());

    // 3. 最后初始化FreshMvvm的页面导航
    var mainPage = FreshPageModelResolver.ResolvePageModel<MainPageModel>();
    MainPage = new FreshNavigationContainer(mainPage);
}

3. 在ViewModel中正确注入IMapper

通常我们不需要直接注入IConfigurationProvider,只需要注入IMapper即可:

public class MainPageModel : FreshBasePageModel
{
    private readonly IMapper _mapper;

    // 构造函数注入IMapper
    public MainPageModel(IMapper mapper)
    {
        _mapper = mapper;
    }

    // 示例:使用AutoMapper进行对象映射
    private void ProcessData()
    {
        var userDto = new UserDto { Id = 1, Nickname = "Alex" };
        var userModel = _mapper.Map<UserModel>(userDto);
        // 后续业务逻辑...
    }
}

为什么之前会崩溃?

你遇到的TinyIoCResolutionException: Resolve failed: IConfigurationProvider错误,本质是TinyIoC容器里没有这个服务的注册记录。AutoMapper的IMapper依赖IConfigurationProvider,如果注册顺序不对(先解析ViewModel再注册服务),或者没有正确把初始化好的配置实例注册到容器,都会导致依赖解析失败。

额外注意事项

  • 确保共享项目和所有平台项目(iOS/Android)都安装了AutoMapper和FreshMvvm的NuGet包,版本保持一致;
  • 不要在ViewModel中手动创建Mapper实例,必须通过DI注入,保证全局配置的一致性;
  • 如果确实需要注入IConfigurationProvider,也要像上面那样把初始化好的MapperConfiguration实例注册到容器中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:50:20