命名空间在 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 和浏览)。选择共享项目,然后选择您刚刚创建的项目。现在,您共享项目中的任何代码文件都将与您的平台特定项目一起编译,就好像代码文件在平台特定项目中一样(注意命名空间!)。对其他特定于平台的项目重复此操作。