【问题标题】:Autofac, Android and Xamarin Forms == No accessible constructors were foundAutofac、Android 和 Xamarin Forms == 未找到可访问的构造函数
【发布时间】:2018-05-06 17:02:13
【问题描述】:

我有一个使用 .NET Standard 2.0 并利用 Autofac for DI 的 Xamarin Forms 项目。

该项目适用于 Android、iOS 和 UWP。

当我使用 iOS 或 UWP 运行项目时,一切正常。

在 Android 中运行它时,我在尝试解析 MainViewModel 时收到“找不到可访问的构造函数...”异常。

注册:builder.RegisterType<MainViewModel>().AsSelf();

解析 MainViewModel:

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

MainViewModel 构造函数:

public MainViewModel(
    ISecureDatabaseService secureDb, 
    IReceiptQueuedSenderHandler receiptQueuedSenderHandler)

ISecureDatabaseServiceIReceiptQueuedSenderHandler 在注册 MainViewModel 之前已在 Autofac 中注册。

知道这里发生了什么,为什么在 iOS 和 UWP 上运行顺畅,而在 Android 上运行不畅?

这可能与 Xamarin 表单中的链接有关吗?

我正在使用 Autofac 4.8。我也尝试过 Autofac 4.6.2,但结果相同。

【问题讨论】:

    标签: android xamarin.forms autofac


    【解决方案1】:

    听起来它几乎肯定与表单中的 Android 链接有关。我对此做了一场噩梦,直到​​我崩溃并为每个 Android 应用程序创建了一个 linker.xml 文件,如下所述:https://docs.microsoft.com/en-us/xamarin/cross-platform/deploy-test/linker

    【讨论】:

    • 是的,事实证明这是一个链接问题。我已经添加了解决方案的细节作为答案。
    【解决方案2】:

    这个问题确实是一个链接问题。

    为了解决这个问题,我遵循了这篇博文中的指导:Using The Linker In Xamarin Projects

    为了解决这个特殊问题,我将 .NET Standard 2.0 共享 Xamarin 表单项目的程序集名称添加到 Android 项目的链接部分:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 2021-01-03
      • 2018-03-13
      相关资源
      最近更新 更多