IMvxAndroidCurrentTopActivity是单例吗

本文关键字:单例吗 IMvxAndroidCurrentTopActivity | 更新日期: 2023-09-27 18:21:11

IMvxAndroidCurrentTopActivity可用于获取MvvvmCross Android应用程序中的当前顶级活动。

问题是:MvvvmCross会在顶部活动更改后立即创建该接口的新实例吗?还是会重用相同的实例并只更改Activity属性。

背景:我想将该接口作为注册为singleton的类中的构造函数依赖项
它行得通吗?

IMvxAndroidCurrentTopActivity是单例吗

在默认的MvvvmCross设置中,该接口是作为单例实现的,因此只要您的应用程序在内存中,就保证返回相同的实例

参见中的InitializePlatformServiceshttps://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注释或某种命名约定来实现,但我认为这些目前还没有计划,而且这两种技术都不会在编译时进行检查。