【问题标题】:How to use System.Security.Cryptography in Xamarin.Forms PCL如何在 Xamarin.Forms PCL 中使用 System.Security.Cryptography
【发布时间】:2017-10-11 20:06:04
【问题描述】:

参考此链接https://developer.xamarin.com/api/namespace/System.Security.Cryptography/

我可以知道如何将它包含在我的 Xamarim.Forms PCL 项目中吗?当我包含在内时,Visual Studio 给出如下图所示的错误

我想知道是否有人知道如何解决这个问题?谢谢。

【问题讨论】:

  • 我相信有一些系统密码学类不能在 PCL 中使用。我使用 pclCrypto NuGet 在我的 pcl 中运行加密函数。 nuget.org/packages/PCLCrypto

标签: xamarin xamarin.forms visual-studio-2017


【解决方案1】:

命名空间在 Xamarin.iOS 和 Xamarin.Android 中都可用。您可以为这两个平台制作特定于平台的实现,然后使用 DependencyService 解决它们

您的 PCL 中将有您所需的任何界面

public interface ICryptoService // or whatever
{
  string Cipher(string stringToCipher);
  string Decipher(string stringToDecipher);
}

然后在您的平台特定项目中实现这些

using System.Security.Cryptography;

namespace MyApp.Droid
{
  public class CryptoService : ICryptoService
  {
    // implement interface
  }
}

要使DependencyService 可以看到实现,您必须使用DependencyAttribute

[assembly: Xamarin.Forms.Dependency(typeof(MyApp.Droid.CryptoService)]

您现在可以使用

在您的 PCL 中获取一个实例
var cryptoService = DependencyService.Get<ICryptoService>();

然后使用它。 iOS的步骤基本相同。对于 UWP,您必须手动注册实现,请参阅 here

编辑:

由于所有平台的实现可能都是相同的,因此您可以引入一个共享项目并将实现放在那里。您现在所要做的就是从您的 iOS 和 Android 项目中引用共享项目。

编辑 2:

将共享项目添加到现有 Xamarin.Forms 解决方案非常简单。只需在 VS 中右键单击您的解决方案,选择 Add -> New Project... (目前我手头只有一个德语本地化的 VS,但应该是类似的东西)。现在选择Shared Project,给它起个名字然后点击OK,你的解决方案中就会有一个新的共享项目。

现在右键单击您的平台特定项目并选择 Add -> Reference...。添加引用的窗口应打开,您可以在左侧选择引用的来源(程序集、项目、共享项目、COM 和浏览)。选择共享项目,然后选择您刚刚创建的项目。现在,您共享项目中的任何代码文件都将与您的平台特定项目一起编译,就好像代码文件在平台特定项目中一样(注意命名空间!)。对其他特定于平台的项目重复此操作。

【讨论】:

  • 谢谢,DependencyService 的想法似乎是合法的。但是由于目前我已经在 PCL 中,是否可以使用共享项目?我对 Xamarin 很陌生,刚刚开始学习。您能否更详细地解释在这种情况下如何使用共享项目来减少我的开发时间?是的,所有平台的实现都是相同的。
  • @teapeng 我已经添加了有关如何添加共享项目的进一步说明。
  • 谢谢.. 我将您的答案标记为答案,因为我已经使用 DependencyService 完成了它。但我很想尝试使用 SAP 来实现易于维护。再次感谢您的快速帮助。
  • @teapeng 在这种情况下 SAP 是什么意思?
  • 哦,它是共享资产项目。我从 Xamarin 电子书中学到了这个词。他们一直在谈论 PCL 与 SAP。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多