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

时间:2014-04-03 13:34:27

标签: c# xamarin.android mvvmcross

我有一个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框架就会失败,当它想要加载我的插件时,插件加载器会因为第一个插件而失败:

manager.EnsurePlatformAdaptionLoaded<PluginLoader>(); 

显示消息“无法解析类型”。

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

1 个答案:

答案 0 :(得分:2)

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

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

如果您需要特定于平台的Application,请将其添加为单独的类。

我们试图在https://github.com/MvvmCross/MvvmCross/wiki/High-Level-MvvmCross-Objects

中解释一下

另见MvvmCross: Android Application attribute