在 Xamarin.Android 和 MvvmCross 中定义应用程序类的基类

Posted

技术标签:

【中文标题】在 Xamarin.Android 和 MvvmCross 中定义应用程序类的基类【英文标题】:Define a base class for application class in Xamarin.Android and MvvmCross 【发布时间】:2014-04-03 13:34:27 【问题描述】:

我有一个 XYZ 模块,它主要是一个带有一些 c# 类的预构建 Xamarin android java 绑定库。在“独立”的 Xamarin Android 项目中,它可以完美运行。但现在我想在我的大型跨平台 Xamarin 项目中实现一个插件,它使用 MvvmCross 框架,并遵循 MvvmCross 标准模式。

XYZ 模块需要为 Android Application 类设置一个基类,如下所示:

[Application]
public class Application : XYZApplication

  public Application(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
   
  public override void OnCreate()
   base.OnCreate();

一般不呈现应用类,MvvmCross Setup.cs从核心项目中获取,CreateApp()方法从核心返回这个类:

public class App : MvxApplication

   public override void Initialize()
   
     CreatableTypes().EndingWith("Service").AsInterfaces().RegisterAsLazySingleton();
     RegisterAppStart<ViewModels.StartupViewModel>();
    

如果我没有使用 ApplicationAttribute 指定 Application 类,XYZ 模块在其插件中会失败。如果我这样做了,那么 MvvmCross 框架会失败,当它想要加载我的插件时,pluginloader 会在这一行的第一个插件失败:

manager.EnsurePlatformAdaptionLoaded<PluginLoader>(); 

带有“无法解析类型”的消息。

我认为问题的根源是Application类不能有两个基类,或者不能创建两次? 也许有一个解决方案,如果你需要定义一个应用程序类,在使用 MvvmCross 时有一个基类。

【问题讨论】:

问题是什么? 【参考方案1】:

MvvmCross App 是一个 PCL 类,它提供了一个地方来初始化和列出所有 ViewModels 和其他 ModelService 代码。

它完全独立于任何特定于操作系统的ApplicationAppDelegate 对象。

如果您需要特定于平台的Application,则添加一个作为单独的类。

我们试图在https://github.com/MvvmCross/MvvmCross/wiki/High-Level-MvvmCross-Objects 中解释一下

另见MvvmCross: Android Application attribute

【讨论】:

谢谢斯图尔特。我做了一个测试(之前应该做过......),当我这样定义我的应用程序类时:public class MainApp : Application,基于​​ Android.App.Application 然后我的项目与 MvvmCross 完美运行。但是当我将基类更改为 XYZApplication 时,MvvmCross 失败,第一个插件的 PluginLoader 无法解析类型。这个 XYZApplication 来自绑定库中的一个 java 类,它扩展了 Application 类public class XYZApplication extends Application。也许我在这里失踪或做错了什么。 不确定是否有人可以在如此抽象的 XYZ 级别上为您提供帮助。检查跟踪,启用所有可以的调试输出,提供尽可能多的调试 - 可能是在一个新问题中 - 听起来你只是 XYZ 有一个特定问题 - 不管它是什么。

以上是关于在 Xamarin.Android 和 MvvmCross 中定义应用程序类的基类的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin - 无法通过 Android(和 iOS)访问本地 api

如何在 Xamarin.android 中更改条目光标颜色

dotnet 5 和 Xamarin Android:找不到导入的项目“Xamarin.Android.CSharp.targets”

访问路径被拒绝(Xamarin/Android)

如何在 Azure Pipelines 中自动增加 Xamarin Android 内部版本号和版本号?

Xamarin.Form与Xamarin.Android或Xamarin.IOS的区别简述