2

我正在编写一个 Xamarin.Forms 应用程序。它之前还在工作,但现在它在我的 Android 项目的这一行抛出异常:

global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());

它抛出异常:

System.TypeInitializationException:“MyApp.Core.App”的类型初始化程序引发了异常。

构造函数甚至没有被调用。我什至不知道我做了什么导致这个......有人知道吗?

这是我的 App.xaml.cs 代码

public partial class App : Application
{
    public static INavigation Navigation
    {
        get;
        set;
    }

    public static Lazy<LoungeListPage> LoungeListView { get; set; } = new Lazy<LoungeListPage>();
    public static Lazy<LoungePage> LoungeView { get; set; } = new Lazy<LoungePage>();
    public static Lazy<EditFencePage> FenceView { get; set; } = new Lazy<EditFencePage>();
    public static Lazy<NewFencePage> NewFenceView { get; set; } = new Lazy<NewFencePage>();
    public static ILoungeService LoungeService { get; set; } = new LoungeService();
    public static ILoginService LoginService { get; set; } = new LoginService();

    public App ()
    {
        InitializeComponent();

        DependencyService.Register<PlatformDependentCode>();
        DependencyService.Get<IPlatformDependentCode>().OnFirstPageLoaded = this.OnFirstPageLoaded;

        var rootPage = new NavigationPage(new MyApp.Core.MainPage());
        MainPage = rootPage;
        App.Navigation = rootPage.Navigation;
    }

    protected override void OnStart ()
    {
        // Handle when your app starts

        Plugin.Geolocator.CrossGeolocator.Current.DesiredAccuracy = 0.001;
    }

    protected override void OnSleep ()
    {
        // Handle when your app sleeps
    }

    protected override void OnResume ()
    {
        // Handle when your app resumes
    }

    private void OnFirstPageLoaded()
    {
        var deviceInfo = DependencyService.Get<IPlatformDependentCode>().GeneralPlatformDependent.GetDeviceInfo();
        LoginService.InitializeDevice(deviceInfo);
    }
}

在 App.xaml 中

<?xml version="1.0" encoding="utf-8" ?>
<Application xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="MyApp.Core.App">
    <Application.Resources>

    <!-- Application resource dictionary -->

    </Application.Resources>
</Application>
4

1 回答 1

5

TypeInitializationException请参阅(请参阅此处)的文档

作为类初始化器抛出的异常的包装器抛出的异常。

似乎您的类型初始化程序代码引发了异常。由于没有静态构造函数,我不会怀疑new Lazy<T>()抛出异常,我猜问题出在

public static ILoungeService LoungeService { get; set; } = new LoungeService();
public static ILoginService LoginService { get; set; } = new LoginService();

据说其中一个会引发异常。您可以通过从构造函数创建实例并记录该异常(暂时)来检查。

public static ILoungeService LoungeService { get; set; }
public static ILoginService LoginService { get; set; } 

public App ()
{
    try
    {
        LoungeService = new LoungeService();
        LoginService = new LoginService();
    }
    catch(Exception e)
    {
        Debug.WriteLine(e);
        throw;
    }

    InitializeComponent();

    // ...
}

(或DependencyService立即向您注册)。

于 2018-04-13T09:36:09.233 回答