0

私は Xamarin Forms アプリに取り組んでおり、Windows Phone のビルドと実行はすべて順調に進んでいます。ただし、Android バージョンを実行しようとすると、正常にビルドされてから失敗し、ViewModelLocator で ViewModel を解決するために ServiceLocator を呼び出すときに例外が発生します。

ViewModelLocator の改行

return ServiceLocator.Current.GetInstance<MainViewModel>();

System.Reflection.TargetInvocationException
Source  "mscorlib"  string
StackTrace  "at System.Reflection.MonoMethod.Invoke (object,System.Reflection.BindingFlags,System.Reflection.Bind…"

「GetInstance」ショーにカーソルを合わせます

Could not resolve type: global::Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<global::hms.BillSplitter.ViewModel.PCL.MainViewModel>

私のViewModelの唯一のコンストラクタは次のようになります

public MainViewModel(INavigationService navigationService, ICountryTippingService countryTippingService, AppSettings appSettings)
{
    _navigationService = navigationService;
    _countryTippingService = countryTippingService;
    ThisAppSettings = appSettings;
    ThisBillDetail = new BillDetail();
    ThisBillDetail.TotalOnBill = 0;
}

すべての依存関係は、ViewModelLocatorたとえば、これに先立って登録されます

SimpleIoc.Default.Register(() => new HmsPublicCoreMobileServiceClient(HmsCommonSettingConstants.HmsPublicCoreServiceUrl, HmsCommonSettingConstants.HmsPublicCoreServiceAppKey));
var prefService = ServiceLocator.Current.GetInstance<IPreferenceService>();
SimpleIoc.Default.Register(() => (SettingsHelper.GetCurrentSettings(prefService)));

SimpleIoc.Default.Register<MainViewModel>();

MainActivity.cs (Android) および AppDelegate(iOS) などのプラットフォーム固有のものもあります。

SimpleIoc.Default.Register(() => new PreferenceService(this));

私が得られないのは、Windows Phone で美しく動作するということですか? Android との違いは何ですか? Xamarin 1.3 以降で SimpleIoc を使用した人はいますか?

ビューモデルを作成するためにファクトリを使用する必要がありますか?

どんな助けでも大歓迎です。MVVMLight (5.1.0.1) と Xamarin (1.3.3) のすべての最新バージョンを使用しています。

4

1 に答える 1

1

私はついに問題が何であるかを突き止めましたが、それはかなり基本的なものであり、MvvmLight や Xamarin Forms の更新とは関係ありません!

ファクトリに具体的なクラスを登録するという間違いを犯し、インターフェイスで GetInstance を試みました。SimpleIoC はそれを調整できませんでした。

上のコードから

SimpleIoc.Default.Register(() => (SettingsHelper.GetCurrentSettings(prefService)));

になるはずだった

SimpleIoc.Default.Register<IPreferenceService>(() => (SettingsHelper.GetCurrentSettings(prefService)));

ラインが

var prefService = ServiceLocator.Current.GetInstance<IPreferenceService>();

私が話していることを知っているでしょう。

とにかく、このようなエラーが発生した場合は、何を探すべきかがわかります!!

于 2015-02-13T15:55:41.087 に答える