0

ここで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 の「哲学」とは何ですか?

ありがとうございました。

4

1 に答える 1

1

「viewmodel が見つかりません」という問題の場合、これは mvvmcross がデフォルトでアプリを含むアセンブリ内のビューモデルのみを検索するために発生します。

他のアセンブリで表示する場合は、Setup.cs で ViewModelAssemblies をオーバーライドします。たとえば、MvvmCross でこれがどのように行われたかを確認してください - 共有ビュー モデルとビューの構造化


一般的なマルチプラットフォーム アプローチについては、次のような質問と回答をお読みください。

また、PCL を使用する必要がないことも覚えておいてください。複数のプラットフォーム固有のコア プロジェクト間でファイル リンクを使用する場合は、もちろんこのアプローチを使用できます。


最後に、質問ごとに 1 つの質問をするようにしてください。これにより、stackoverflow がユーザーや検索エンジンでより適切に機能することがわかりました。質問をリンクする必要がある場合は、ハイパーリンク参照を追加するだけで済みます。stackoverflow はそれらを関連としてマークします。

于 2013-06-23T11:03:16.300 に答える