ここで2 つの質問があります。最初のものは単に具体的で、別のものはより一般的ですが、最初のもののソースです。
したがって、私の特定の問題: System.Security.Cryptography名前空間 (たとえば、SHA256Managed クラス)を使用して暗号化(実際にはハッシュ) アルゴリズムを使用したいです。
(幸いなことに) Xamarin がSystem.dllにそれらを実装していることがわかりました。しかし、それは移植性がなく、明らかにCore アプリケーションから直接使用することはできません。
しかし、それを可能にする別の素晴らしいプロジェクト、 PclContribも見つけました。残念ながら、Touch と Android の実装はありません。(ただし、それでもデスクトップ (Web) と Windows Phone ではうまく機能します。また、コアに含めることもできます (ポータブル プロジェクトを使用するため))。
とにかく、それをうまく解決するために、暗号化メソッドの基本クラスを作成し、カスタム 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 projectに配置されています。
それで、そのような状況のためにさらにカスタムの初期化が必要ですか、それとも何か他のものを見逃していますか?
そして、実際には、より一般的な質問は、そのようなマルチプラットフォーム アプローチをどのように構築すればよいかということです。実際、今私は HttpUtility.UrlEncode で同様の問題を抱えています。これは Core プロジェクトで使用したいと考えています。
そのような状況に対処するための MvvmCross の「哲学」とは何ですか?
ありがとうございました。