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

Xamarin Forms(.NET Standard 2.0) Android端Autofac解析MainViewModel遇无可用构造函数错误

解决Xamarin Forms Android中Autofac解析MainViewModel的“No accessible constructors were found”异常

我之前也碰到过类似的跨平台DI问题,结合你的场景(.NET Standard 2.0 + Autofac + Xamarin多平台),这个异常只在Android出现但iOS/UWP正常,大概率是Android链接器优化或者构造函数访问权限导致的,下面给你一步步排查和解决的方案:

1. 先检查构造函数的访问权限

最基础也最容易忽略的一点:确保MainViewModel的构造函数是public修饰符。Autofac默认只会尝试解析公共构造函数,Android平台的反射机制比iOS/UWP更严格,如果构造函数是internal或者private,直接就会抛出找不到可访问构造函数的异常。

正确示例:

public class MainViewModel
{
    // 必须是public的构造函数
    public MainViewModel(/* 如果有依赖参数,确保这些依赖已注册 */)
    {
        // ...
    }
}

2. 处理Android链接器的代码移除问题

Android的链接器(Linker)会自动移除它认为“未被直接引用”的代码——哪怕你是通过DI反射调用的构造函数,链接器也可能误判为无用代码并移除,这是Android平台独有的问题,iOS/UWP的链接策略相对宽松。

解决方式有两种:

方式一:添加Xamarin的[Preserve]特性

给MainViewModel类添加[Preserve]特性,明确告诉链接器保留这个类的所有成员:

using Xamarin.Forms;

// 保留所有成员,包括构造函数、属性、方法等
[Preserve(AllMembers = true)]
public class MainViewModel
{
    public MainViewModel(/* 依赖参数 */)
    {
        // ...
    }
}

方式二:自定义链接器配置文件

创建一个Linker.xml文件,添加到Android项目中,并设置其生成操作为Embedded Resource,内容如下:

<linker>
  <!-- 替换成你的Core项目程序集名称 -->
  <assembly fullname="YourApp.Core">
    <!-- 替换成MainViewModel的完整命名空间 -->
    <type fullname="YourApp.Core.ViewModels.MainViewModel" preserve="all"/>
  </assembly>
</linker>

3. 快速验证构造函数的依赖注册

虽然iOS/UWP正常,但也可以快速确认:如果MainViewModel的构造函数有依赖参数,比如public MainViewModel(ISomeService service),那你必须在Autofac注册代码里添加对应的服务注册,比如builder.RegisterType<SomeService>().As<ISomeService>()。

4. 确认Autofac版本兼容性

确保你使用的Autofac版本兼容.NET Standard 2.0和Xamarin Android,建议使用Autofac 4.9.4及以上版本(这个版本开始对Xamarin的支持更完善)。

最后验证解析代码

确保你的解析逻辑是正确的,比如:

public MainViewModel MainPage 
{ 
    get 
    { 
        using (var scope = _container.BeginLifetimeScope())
        {
            return scope.Resolve<MainViewModel>();
        }
    }
}

按照上面的步骤排查,基本就能解决Android平台的这个异常了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:29:26