IMvxAndroidCurrentTopActivity是单例吗
本文关键字:单例吗 IMvxAndroidCurrentTopActivity | 更新日期: 2023-09-27 18:21:11
IMvxAndroidCurrentTopActivity
可用于获取MvvvmCross Android应用程序中的当前顶级活动。
问题是:MvvvmCross会在顶部活动更改后立即创建该接口的新实例吗?还是会重用相同的实例并只更改Activity
属性。
背景:我想将该接口作为注册为singleton的类中的构造函数依赖项
它行得通吗?
在默认的MvvvmCross设置中,该接口是作为单例实现的,因此只要您的应用程序在内存中,就保证返回相同的实例
参见中的InitializePlatformServices
https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Droid/Platform/MvxAndroidSetup.cs#L76
protected override void InitializePlatformServices()
{
var lifetimeMonitor = new MvxAndroidLifetimeMonitor();
Mvx.RegisterSingleton<IMvxAndroidActivityLifetimeListener>(lifetimeMonitor);
Mvx.RegisterSingleton<IMvxAndroidCurrentTopActivity>(lifetimeMonitor);
Mvx.RegisterSingleton<IMvxLifetime>(lifetimeMonitor);
Mvx.RegisterSingleton<IMvxAndroidGlobals>(this);
var intentResultRouter = new MvxIntentResultSink();
Mvx.RegisterSingleton<IMvxIntentResultSink>(intentResultRouter);
Mvx.RegisterSingleton<IMvxIntentResultSource>(intentResultRouter);
var viewModelTemporaryCache = new MvxSingleViewModelCache();
Mvx.RegisterSingleton<IMvxSingleViewModelCache>(viewModelTemporaryCache);
}
这种singleton性质实际上是这个接口定义的一部分,所以如果你要覆盖android设置,那么你应该把这个注册作为singleton。
在一般级别上,恐怕目前只有一种方法可以在MvvmCross中判断接口或对象是注册为单例还是动态创建按需对象-查看源
- 例如。https://github.com/slodge/MvvmCross/search?q=IMvxAndroidCurrentTopActivity&ref=cmdform
在未来,这可能通过XML注释或某种命名约定来实现,但我认为这些目前还没有计划,而且这两种技术都不会在编译时进行检查。