1

2 つの Core ライブラリをアプリにリンクすることはできますか?
ログインとアカウントのビュー モデルを持つ Common.Core ライブラリを 1 つ作成したいと思います。
いくつかのドメイン ビュー モデルを含む別の Domain.Core ライブラリが必要です。
これらは、いくつかの異なるプロジェクトで使用できます。
私のアプリでは、新しい Setup().Initialize() を実行します。
私の Setup クラスは CreateApp() をオーバーライドします ...

public class Setup : MvxPhoneSetup
{
    protected override IMvxApplication CreateApp()
    {
        CreatableTypes().EndingWith("Service").AsInterfaces().RegisterAsLazySingleton();
        return new Common.Core.App();

        // TODO: can I setup a Domain.Core library here too?
    }
}

私はこれをやってみました...

CreatableTypes(Assembly.Load("Domain.Core")).EndingWith("Service").AsInterfaces().RegisterAsLazySingleton();

しかし、そこからドメイン モデルを解決しようとすると、ReflectionTypeLoadException が発生します。
誰かがこのようなことを試しましたか?

ありがとう!

4

1 に答える 1

1

はい、複数の「コア」プロジェクトを使用しても機能するはずです。

ReflectionTypeLoadException発生したResolveことは、2 番目のアセンブリが利用できない別のアセンブリを必要とする可能性があることを示唆していますか? 非常に単純な 2 番目のコア プロジェクトで同じ問題が発生しますか? 例外に関する詳細情報を入手できますか? これはどのプラットフォームで発生していますか?


複数のアセンブリから型をロードする場合ViewModelは、オーバーライドできる Setup メソッドがあります。MvvmCross の既定の ViewModelLocator は、Setup にリストされているアセンブリから ViewModel のリストを取得します。MvxSetup.csを参照

(申し訳ありませんが、このリストは ui プロジェクトにあります。実際にはメイン コア プロジェクトにあるはずです)


クロスプラットフォームの互換性のために、使用はお勧めしませんAssembly.Load-次のようなより静的な方法を使用することをお勧めしますtypeof(Domain.Core.Something).Assembly

xamarin.android や (特に) xamarin.ios などの「パッケージ化されたアプリケーション」プラットフォームで作業することはお勧めしませんAssembly.Load。アセンブリが静的に参照され、既に読み込まれている場合、これは iOS プラットフォームでのみ機能します。 iOS の特別なブートストラップ ファイル。また、Assembly.Load で使用される名前は、プラットフォームによって異なることに注意してください。たとえば、Android では、.dll で終わるファイル名を使用する必要があります。MvxAndroidSetup.csを参照してください。WP や winRT などの他のプラットフォームのAssembly.Load場合は、より従来どおりに機能する可能性がありますが、昨年、この種のコードに何時間も、何日も、何週間も個人的に悪態をつきました。

于 2013-05-23T06:47:28.713 に答える