【问题标题】:PCL or cloned projects (MvvmCross) [closed]PCL 或克隆项目(MvvmCross)[关闭]
【发布时间】:2014-02-16 13:13:35
【问题描述】:

我需要一个 WP8 项目和一个 Android 项目。到目前为止,我只看到一个名为 Core 的 PCL,它链接到所有平台项目。问题是,我有平台特定的参考,我需要包括,这取决于平台。我该如何处理?

我也看到了这个:https://github.com/Redth/WshLst。该项目没有 PCL 并使用克隆项目。

我应该走哪条路?

【问题讨论】:

    标签: android windows-phone-8 xamarin mvvmcross azure-mobile-services


    【解决方案1】:

    正如您所说,有两种方法可以共享代码。 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.LocationWatcherDroid.LocationWatcher

    通常您会使用某种控制反转 (IoC) 容器在启动时注册特定于模式的类型。然后,您的核心项目将获得一个实例,通过依赖注入或通过 IoC 容器解析。您的核心 PCL 将严格针对接口进行编程,而不必担心具体的实现。

    这就是 MvvmCross 插件的工作方式。几乎所有插件都带有一个核心接口和一个特定于平台的实现。

    【讨论】:

      【解决方案2】:

      您应该采用哪种方式取决于您的应用和您的需求。

      可以使用服务定位和插件技术将特定于平台的资源注入 PCL:

      或者,您可以将共享代码与部分类、#if 等一起使用

      在这个出色的答案中讨论了这两种方法的优缺点 - What is the advantage of using portable class libraries instead of using "Add as Link"?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多