MvvmCross MvxException "Unable to create and initialize the ViewModel" in the RELEASE configuration

I'm developing an application with Xamarin.Android MvvmCross. Every time I run the application in the RELEASE configuration, it starts crashing with the following error:

Cirrious.CrossCore.Exceptions.MvxException: unable to create and initialize a ViewModel for the type of DroidApp.Core.ViewModels.MainViewModel MvxDefaultViewModelLocator locator - check MvxTrace for more information

This application works absolutely fine in the DEBUG configuration. The problem begins to grow as soon as I updated my code to use MvvmCross 3.1

Complete withdrawal via stacktrace below:

03-16 03: 53: 04.110 I / MonoDroid (593): IMPROPER EXCEPTION: Cirrious.CrossCore.Exceptions.MvxException: unable to create and initialize a ViewModel for the type of Pcl.Core.ViewModels.MainViewModel MvxDefaultViewModelLocator locator - check MvxTrace for more information 03-16 03: 53: 04.110 I / MonoDroid (593): the Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel (Cirrious.MvvmCross.ViewModels.MvxViewModelRequest, Cirrious.MvvmCross.ViewModels.IMvxBundle, Cirrious.MvvmCross.ViewModels.IMvxViewModelLocator) 03-16 03: 53: 04.110 I / MonoDroid (593): the Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel (Cirrious.MvvmCross.ViewModels.MvxViewModelRequest, Cirrious.MvvmCross.ViewModels.IMvxBundle) 03-16 03: 53: 04,110 I / MonoDroid (593): the Cirrious.MvvmCross.Droid.Views.MvxAndroidViewsContainer.ViewModelFromRequest (Cirrious.MvvmCross.ViewModels.MvxViewM odelRequest, Cirrious.MvvmCross.ViewModels.IMvxBundle) 03-16 03: 53: 04.110 I / MonoDroid (593): the Cirrious.MvvmCross.Droid.Views.MvxAndroidViewsContainer.CreateViewModelFromIntent (Android.Content.Intent, Cirrious.MvvmCross.ViewModels. IMvxBundle) 03-16 03: 53: 04.110 I / MonoDroid (593): at Cirrious.MvvmCross.Droid.Views.MvxAndroidViewsContainer.Load (Android.Content.Intent, Cirrious.MvvmCross.ViewModels.IMvxBundle, System.Type) 03- March 16: 53: 04.110 I / MonoDroid (593): the Cirrious.MvvmCross.Droid.Views.MvxActivityViewExtensions.LoadViewModel (Cirrious.MvvmCross.Droid.Views.IMvxAndroidView, Cirrious.MvvmCross.ViewModels.IMvxBundle) 03-16 03 53 : 04.110 I / MonoDroid (593): the Cirrious.MvvmCross.Droid.Views.MvxActivityViewExtensions / <> c_DisplayClass3.b_1 () 03-16 03: 53: 04.110 I / MonoDroid (593): the Cirrious.MvvmCross.Views.MvxViewExtensionMethods .OnViewCreate (Cirrious.MvvmCross.Views.IMvxView, System.Func 1<Cirrious.MvvmCross.ViewModels.IMvxViewModel>) <IL 0x00013, 0x00113> 03-16 03:53:04.110 I/MonoDroid( 593): at Cirrious.MvvmCross.Droid.Views.MvxActivityViewExtensions.OnViewCreate (Cirrious.MvvmCross.Droid.Views.IMvxAndroidView,Android.OS.Bundle) <IL 0x00073, 0x0031f> 03-16 03:53:04.110 I/MonoDroid( 593): at Cirrious.MvvmCross.Droid.Views.MvxActivityAdapter.EventSourceOnCreateCalled (object,Cirrious.CrossCore.Core.MvxValueEventArgs 0x00113> 1<Cirrious.MvvmCross.ViewModels.IMvxViewModel>) <IL 0x00013, 0x00113> 03-16 03:53:04.110 I/MonoDroid( 593): at Cirrious.MvvmCross.Droid.Views.MvxActivityViewExtensions.OnViewCreate (Cirrious.MvvmCross.Droid.Views.IMvxAndroidView,Android.OS.Bundle) <IL 0x00073, 0x0031f> 03-16 03:53:04.110 I/MonoDroid( 593): at Cirrious.MvvmCross.Droid.Views.MvxActivityAdapter.EventSourceOnCreateCalled (object,Cirrious.CrossCore.Core.MvxValueEventArgs ) <IL 0x00073, 0x0031f> 1<Cirrious.MvvmCross.ViewModels.IMvxViewModel>) <IL 0x00013, 0x00113> 03-16 03:53:04.110 I/MonoDroid( 593): at Cirrious.MvvmCross.Droid.Views.MvxActivityViewExtensions.OnViewCreate (Cirrious.MvvmCross.Droid.Views.IMvxAndroidView,Android.OS.Bundle) <IL 0x00073, 0x0031f> 03-16 03:53:04.110 I/MonoDroid( 593): at Cirrious.MvvmCross.Droid.Views.MvxActivityAdapter.EventSourceOnCreateCalled (object,Cirrious.CrossCore.Core.MvxValueEventArgs 1) 03-16 03: 53: 04.110 I / MonoDroid (593): the (call-shell delegate) System.EventHandler <T21> 1> .invoke_void_this__object_TEventArgs (object, Cirrious.CrossCore.Core.MvxValueEventArgs 1<Android.OS.Bundle>) <0x00067> 03-16 03:53:04.110 I/MonoDroid( 593): at Cirrious.CrossCore.Core.MvxDelegateExtensionMethods.Raise<Android.OS.Bundle> (System.EventHandler 03:53: 1<Android.OS.Bundle>) <0x00067> 03-16 03:53:04.110 I/MonoDroid( 593): at Cirrious.CrossCore.Core.MvxDelegateExtensionMethods.Raise<Android.OS.Bundle> (System.EventHandler System.EventHandler 1> object, Android.OS.Bundle) <0x000c3> 03-16 03: 53: 04.110 I / MonoDroid (593): the Cirrious.CrossCore.Droid.Views.MvxEventSourceActivity.OnCreate (Android.OS.Bundle) 03-16 03: 53: 04.110 I / MonoDroid (593) on MyApp.Droid. Common.MvxActivityBase.OnCreate (Android.OS.Bundle) 03-16 03: 53: 04.110 I / MonoDroid (593) on MyApp.Droid.Views.MainView.OnCreate (Android.OS.Bundle) 03-16 03 53 : 04.110 I / MonoDroid (593): the Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (intptr, intptr, intptr) 03-16 03: 53: 04.110 I / MonoDroid (593): at (dynamic method envelope) object.e62191de-ee25 -45fe-b902-796a741820a1 (intptr, intptr, intptr) An unhandled exception:

Cirrious.CrossCore.Exceptions.MvxException: unable to create and initialize a ViewModel for the type of Pcl.Core.ViewModels.MainViewModel MvxDefaultViewModelLocator locator - check MvxTrace for more information 03-16 03: 53: 07.080 E / mono-rt (593): [ ERROR] FATAL WRONG EXCEPTION: Cirrious.CrossCore.Exceptions.MvxException: Unable to create and initialize a ViewModel for the type of Pcl.Core.ViewModels.MainViewModel MvxDefaultViewModelLocator locator - check MvxTrace for more information 03-16 03: 53: 07.080 E / mono -rt (593): the Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel (Request Cirrious.MvvmCross.ViewModels.MvxViewModelRequest, IMvxBundle saveState, IMvxViewModelLocator viewModelLocator) [0x00000] to 0 03-16 03: 53: 07.080 E / m ono-rt (593): the Cirrious.MvvmCross.ViewModels.MvxViewModelLoader.LoadViewModel (Request Cirrious.MvvmCross.ViewModels.MvxViewModelRequest, IMvxBundle savedState) [0x00000] to 0 03-16 03: 53: 07.080 E / mono-rt ( 593): the Cirrious.MvvmCross.Droid.Views.MvxAndroidViewsContainer.ViewModelFromRequest (Cirrious.MvvmCross.ViewModels.MvxViewModelRequest viewModelRequest, IMvxBundle savedState) [0x00000] to 0 03-16 03: 53: 07.080 E / mono-rt (593) : when Cirrious.MvvmCross.Droid.Views.MvxAndroidViewsContainer.CreateViewModelFromIntent (Android.Content.Intent intent, IMvxBundle savedState) [0x00000] "Mono" program came with code 0 (0x0).

+6
source share
2 answers

From the information provided, I do not know what is causing the problem.

The exception that you have specified, selected on https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross/ViewModels/MvxViewModelLoader.cs#L46

This can happen only if MvxDefaultViewModelLocator returns false .

When MvxDefaultViewModelLocator returns false , it always registers a message explaining why - see. Https://github.com/MvvmCross/MvvmCross/blob/v3.1/Cirrious/Cirrious.MvvmCross/ViewModels/MvxDefaultViewModelLocator.cs#L31

To debug it, I would be:

  • try to view trace or log out - including the routing of this conclusion that the works in release mode.
  • try to add an exception handler around your call base.OnCreate() in MainView , to see if he explains the problem.
  • try adding some trace and / or breakpoints to your designer MainViewModel - whether it is a challenge?
  • try to find here other problems that occur only in Release in Xamarin and / or MvvmCross
+6
source

I ran into the same problem, but the tooltip from Stuart helped to understand it.

I have ContactsViewModel, that uses IoC ContactService through the engine. My MainViewModel comprises ContactsViewModel (because Im uses tabs panel as in the textbook).

And I just tried to delete a service call within ContactsViewModel, and everything is fine. I caught the bug inside ctor, and he said: "The operation can not be completed (ABAddressBookErrorDomain error 1.).", So this is my a service error.

So, if someone hit this error, just remember that confused "TargetInvocationException" always strikes when ctor (in particular) there is any exception.

+1
source

All Articles