使用MvvmCross在Xamarin中进行条件编译

时间:2014-07-10 13:30:11

标签: ios xamarin.ios xamarin mvvmcross

我是xamarin和MvvmCross框架的新手。我目前正在为Android,Windows Phone和iOS创建一个多平台应用程序。我目前在查找应用程序正在运行的平台时遇到问题。

我想要做的是在 app.cs 文件中添加if语句。我想检查这是否是一个iOS应用程序然后做的东西,否则这样做。但我没有找到任何好办法,我甚至不确定它可以在这个文件中完成

到目前为止,这是我的代码:

using Cirrious.CrossCore;
using Cirrious.CrossCore.IoC;
using Cirrious.MvvmCross.ViewModels;
using tax.Mobile.Core.Interfaces;
using tax.Mobile.Core.Logic;strong text
namespace tax.Mobile.Core
{
public partial class App : MvxApplication
{
    public override void Initialize()
    {
        CreatableTypes()
            .EndingWith("Service")
            .AsInterfaces()
            .RegisterAsLazySingleton();

#if (__iOS__) 
        RegisterAppStart<ViewModels.FirstViewModel>();
#else
            RegisterAppStart<ViewModels.SearchViewModel>();
#endif
        Mvx.RegisterType<IWebService, MockWebService>();     
    }

}
}

谢谢!

1 个答案:

答案 0 :(得分:0)

这不起作用,PCL库在项目属性中使用自己的符号编译或由#define SYMBOL语法定义。

要选择开始屏幕,您可以使用App构造函数和Setup.CreateApp方法

1)在PCL中创建包含平台选项的枚举

public enum OS
{
  Droid, Touch, WinPhone, WinStore, Mac, Wpf
}

2)在App类构造函数

中使用此枚举值
public App (OS os)
{
    _os = os;
}

public override void Initialize()
{
    /*...*/

    switch(_os)
    {
        case OS.Touch:
            RegisterAppStart<ViewModels.FirstViewModel>(); break;
        default:
            RegisterAppStart<ViewModels.SearchViewModel>();
    }

    /*...*/
}

3)在Setup.CreateApp()方法

中将当前操作系统传递给App
{
    return new.Core.App(OS.Droid)
}