0

我这里有两个问题。第一个只是具体的,另一个是更一般的,但是是第一个的来源。

所以,我的具体问题是:我想通过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 “哲学”是什么?

谢谢你。

4

1 回答 1

1

对于“未找到视图模型”问题,这是因为默认情况下 mvvmcross 仅在包含您的应用程序的程序集中查找视图模型。

如果您希望它查看其他程序集,请在 Setup.cs 中覆盖 ViewModelAssemblies - 看看这是如何完成的,例如,MvvmCross - 构建共享视图模型和视图


对于一般多平台方法,请阅读以下问题和答案:

还请记住,您不必使用 PCL - 如果您更喜欢在多个特定于平台的核心项目之间使用文件链接,那么您当然可以使用这种方法。


最后,还请尝试对每个问题提出一个问题 - 我发现它使 stackoverflow 对用户和搜索引擎也能更好地工作。如果您需要链接问题,那么您只需添加一个超链接参考 - stackoverflow 然后将它们标记为相关。

于 2013-06-23T11:03:16.300 回答