我这里有两个问题。第一个只是具体的,另一个是更一般的,但是是第一个的来源。
所以,我的具体问题是:我想通过System.Security.Cryptography命名空间(例如 SHA256Managed 类)来使用加密(实际上是散列)算法。
我发现(高兴地)Xamarin 已经在System.dll中实现了这些。但它不可移植,显然不能直接从Core 应用程序中使用。
但是我还发现了另一个很棒的项目——PclContrib——它允许你这样做。但是,不幸的是,他们没有 Touch 和 Android 的实现。(但是,这仍然适用于桌面(Web)和 Windows Phone,另外,仍然可以包含在 Core 中(因为它使用可移植项目))。
无论如何,为了很好地解决这个问题,我决定为加密方法创建一些基类,然后覆盖需要自定义 dll 的核心方法(对于任何自定义系统)。
我这样做的方式(至少,试图这样做)是:
在Core App基类中定义虚方法:
public virtual IEncryptionProvider CreateEncryptionProvider()
使用重写 CreateEncryptionProvider(创建 TouchEncryptionProvider 类实例的实例)重写Touch 项目中的Core App 类。
核:
public class App : MvxApplication
触碰:
public class AppTouch : App
在Touch setup.cs中启动它:
protected override Cirrious.MvvmCross.ViewModels.IMvxApplication CreateApp (
{
return new AppTouch();
}
但是,这对我不起作用。启动时,我在日志中收到此异常消息: “ Exception masked KeyNotFoundException: Could not find view for Mynamespace.Etc.LoginViewModel” ,当我执行 new App() 时它工作正常。我不确定该消息是否显示实际问题(就像之前所说的一样,即使这是某些第三方 dll 的问题,与视图完全无关)。但简而言之,这只是 App 的原始继承: MvxApplication,但不是放在Core 而是放在Touch 项目中。
那么,对于这种情况,它是否需要更多的自定义初始化,还是我错过了其他东西?
而且,实际上,更普遍的问题是我应该如何构建这样的多平台方法?实际上,现在我遇到了与 HttpUtility.UrlEncode 类似的问题,我想在我的核心项目中使用它。
处理这种情况的 MvvmCross “哲学”是什么?
谢谢你。