【问题标题】:Xamarin - Using Portable Class Libraries a mandatory way to go?Xamarin - 使用可移植类库是强制性的方法吗?
【发布时间】:2015-04-14 20:21:14
【问题描述】:

最近有人要求我为一个需要使用 Xamarin 构建的新应用程序设置设计。该团队已经为 Android、iOS 和 Windows Phone 创建了一个 DEMO 应用程序。所以基本上这个演示版本需要被转换/重构为一个适当的可维护产品。

在查看当前在 DEMO 应用程序中实现的代码时,我发现使用了一些第三方库,这些库不能作为 PCL 使用。这意味着我无法使用 PCL 构建我的应用程序,除非我可以将此第三方库移植到 PCL 中。

我的发现是:

  • 我们从这个第三方库中使用的功能在所有 3 个平台上都可以正常工作
  • 我找不到任何阻止不应该使用普通类库的原因

问题:

  • 是否有任何阻止原因导致我无法使用普通类库?
  • 公共应用商店会接受这些应用吗?或者这根本不是问题?
  • 如果没有.. 您能否提出建议,尤其是使用普通类库的地方
  • 如果有.. 如何将第三方库移植到 PCL 或有其他解决方法?

【问题讨论】:

  • 一个普通的库项目是针对单个平台/框架的——它们不能针对多个平台/框架。这就是创建 PCL 的原因。您可以使用 DI 或其他方法将平台特定程序集的功能合并到共享 PCL 中。

标签: xamarin xamarin.ios cross-platform portable-class-library


【解决方案1】:

首先:公共应用商店并不关心您应用的内部结构,只要它遵循他们的指导方针即可。这就是 Xamarin 负责的事情,因此从编译器中退出的所有内容都会正常。

第二:如果以更好的方式满足您的需求,您完全可以不使用 PCL。除了 PCL,您还可以使用 Shared Projects 或只是将来自公共库项目的文件链接到每个特定于平台的项目中。

但根据我的个人经验,PCL 是确保您正在编写的代码和您正在使用的工具在每个平台上都能正常运行的好方法,因此您不必担心事后会出现不好的意外。并且 PCL 配置文件 78 对 LINQ 等内容的支持非常好。

此外,您还可以在共享 PCL 代码中使用外观,隐藏具体实现,然后为每个平台单独提供。

可能看起来像:

(PCL)

public interface ILogger
{
    void Log(string message);
}

public static class SharedUtilities
{
    public static ILogger Logger { get; private set; }

    public static void SetUp(ILogger logger)
    {
        Logger = logger;
    }
}

// Now Use it from everywhere in your code:
SharedUtilities.Logger.Log("Hello PCL!");

在您的 iOS 应用中,例如:

public class IOSLogger : ILogger
{
    public void Log(string message) 
    {
        // Make use of a native logging library or whatever you want
    }
}

// AppDelegate:
SharedUtilities.SetUp(new IOSLogger());

【讨论】:

  • 您对前进的建议是什么?拥有一种类型的类库.. 将所有内容移植到 PCL 或使所有 CL(一致的类库类型)或在可能的情况下使用 PCL,仅在必须使用的地方使用 CL(两者的组合)?
  • 下一个问题。使用类库时是否有需要特别注意的关键点。由于引用类库会发出警告:The project 'MyProject' cannot be referenced. The referenced project is targeted to a different framework family (.NETFramework)。这不是错误,客户端启动了,但听起来还是不好。
  • 没有“一致的类库”之类的东西。您可以添加通用 Mono 库并通过文件链接从特定于平台的应用程序项目中引用它们的内容。您可以使用共享项目,请参阅我的答案中的链接。或者您可以使用 PCL。就是这样。您发布的第二件事不仅仅是警告,而是声明您尝试引用的库无法被引用。所以你不能使用它。没有什么可添加的。
  • 我想说的是,除了 PCL 之外使用任何东西都没有意义的地方是:在您的模型类中。在您项目中的任何类中,这些是您最有可能在多个平台上使用的类。模型如此简单的事实非常适合 PCL 的子集性质。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
相关资源
最近更新 更多