I made a custom Android view presenter which uses the IMvxViewModelLoader. Before updating MvvmCross from version 5.7 to 6.2.2 I used to get an instance of
IMvxViewModelLoader by dependency injection:
public class CustomPresenter : MvxAndroidViewPresenter
{
private readonly IMvxViewModelLoader _viewModelLoader;
private readonly IFragmentTypeLookup _fragmentTypeLookup;
private Android.Support.V4.App.FragmentManager _fragmentManager;
public CustomPresenter(IMvxViewModelLoader viewModelLoader, IFragmentTypeLookup fragmentTypeLookup) : base(new List<Assembly>())
{
_fragmentTypeLookup = fragmentTypeLookup;
_viewModelLoader = viewModelLoader;
}
// Other code
}
In my Setup class which inherits from MvxAndroidSetup I override the IMvxAndroidViewPresenter CreateViewPresenter() method:
public class Setup : MvxAndroidSetup
{
protected override IMvxApplication CreateApp()
{
return new App();
}
protected override IMvxTrace CreateDebugTrace()
{
return new DebugTrace();
}
protected override void InitializeIoC()
{
base.InitializeIoC();
Mvx.RegisterSingleton<IFragmentTypeLookup>(new FragmentTypeLookup());
Mvx.RegisterSingleton<IFileLocationService>(new FileLocationService());
Mvx.RegisterSingleton<ISQLitePlatform>(new SQLitePlatformAndroid());
}
protected override IMvxAndroidViewPresenter CreateViewPresenter()
{
var presenter = Mvx.IocConstruct<CustomPresenter>();
Mvx.RegisterSingleton<IMvxAndroidViewPresenter>(presenter);
return presenter;
}
// Other code
}
With the update some changes had to be made to the protected override IMvxAndroidViewPresenter CreateViewPresenter() method so I changed it to:
protected override IMvxAndroidViewPresenter CreateViewPresenter()
{
var presenter = Mvx.IoCProvider.IoCConstruct<CustomPresenter>();
Mvx.IoCProvider.RegisterSingleton<IMvxAndroidViewPresenter>(presenter);
return presenter;
}
Running the app now will throw an exception inside the constructor of CustomPresenter which indicates that the IMvxViewModelLoader instance could not be resolved. I don't register it anywhere but I was assuming MvvmCross did this for me since I didn't register it anywhere before the update. More specifically I thought MvvmCross did this for me when I call base.InitializeIoC();.
I also tried to retrieve an instance of the IMvxViewModelLoader by changing the CustomPresenter constructor into:
public CustomPresenter() : base(new List<Assembly>())
{
_fragmentTypeLookup = Mvx.IoCProvider.Resolve<IFragmentTypeLookup>();
_viewModelLoader = Mvx.IoCProvider.Resolve<IMvxViewModelLoader>();
}
but it has the same result.
I unsuccessfully searched for clues through the update documentation: Upgrade from 5 to MvvmCross 6.