我正在使用MvvmCross
来开发我的Android应用。我希望有一个特定ViewModel
的Singleton实例。为此,我尝试以this link
以下是我的App.cs中的代码
public class App : Cirrious.MvvmCross.ViewModels.MvxApplication
{
public override void Initialize()
{
CreatableTypes()
.EndingWith("Service")
.AsInterfaces()
.RegisterAsLazySingleton();
RegisterAppStart(new AppStart());
}
protected override Cirrious.MvvmCross.ViewModels.IMvxViewModelLocator CreateDefaultViewModelLocator()
{
return MyViewModelLocator ();
}
}
public class MyViewModelLocator : MvxDefaultViewModelLocator
{
public MyViewModelLocator()
{
}
public override IMvxViewModel Load(System.Type viewModelType, IMvxBundle parameterValues, IMvxBundle savedState)
{
if (viewModelType.GetType() == typeof(CartViewModel))
{
var cache = Mvx.Resolve<IMvxMultipleViewModelCache>();
var cachedViewModel = cache.GetAndClear(viewModelType);
if (cachedViewModel == null)
cachedViewModel = base.Load(viewModelType, parameterValues, savedState);
cache.Cache(cachedViewModel);
return cachedViewModel;
}
else
{
return base.Load(viewModelType, parameterValues, savedState);
}
}
}
但不管怎样,有了这个实现,它无法从缓存和缓存中获取ViewModel .GetAndClear调用总是在ViewModelLocator
实现中返回null。除了这个地方,我不会从我的代码中调用任何其他地方的缓存,所以想知道它是如何从缓存中删除的。
另外,我想知道为什么我根本无法使用IOC(即Mvx.RegisterSingleton<ViewModelName>()
和Mvx.Resolve<ViewModelName>()
)来获取单例实例而不是缓存? MvvmCross的内部实现使用缓存而不是IOC。