正如您所说,有两种方法可以共享代码。 PCL 方法和使用文件链接(克隆)。
通过文件链接,您通常使用#if 指令在您的核心中指定特定于平台的功能。喜欢:
#if MONOANDROID
var androidGlobal = this.GetService<Cirrious.MvvmCross.Droid.Interfaces.IMvxAndroidGlobals>();
_geo = new Geolocator(androidGlobal.ApplicationContext);
#else
_geo = new Geolocator();
#endif
对于 PCL 项目,您通常会创建一个接口,然后创建单独的平台特定实现。
因此,您的 PCL 核心项目中可能有一个ILocationWatcher。然后你可以在每个平台项目中创建一个WinPhone.LocationWatcher和Droid.LocationWatcher。
通常您会使用某种控制反转 (IoC) 容器在启动时注册特定于模式的类型。然后,您的核心项目将获得一个实例,通过依赖注入或通过 IoC 容器解析。您的核心 PCL 将严格针对接口进行编程,而不必担心具体的实现。
这就是 MvvmCross 插件的工作方式。几乎所有插件都带有一个核心接口和一个特定于平台的实现。