IMvxAndroidCurrentTopActivity是单身吗?

时间:2013-07-04 09:17:43

标签: c# xamarin.android xamarin mvvmcross

IMvxAndroidCurrentTopActivity可用于获取MvvmCross Android应用中的当前热门活动。

问题是:一旦顶级活动发生变化,MvvmCross是否会创建此接口的新实例,或者是否重用相同的实例并只更改Activity属性。

背景:我想把这个接口作为一个构造函数依赖项,在一个注册为singleton的类中 它会起作用吗?

1 个答案:

答案 0 :(得分:9)

在默认的MvvmCross设置中,该接口实现为单例 - 只要您的应用程序在内存中,就可以保证返回相同的实例

请参阅https://github.com/slodge/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross.Droid/Platform/MvxAndroidSetup.cs#L76

中的InitializePlatformServices
    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);
    }

这个单例性质实际上是这个界面定义的一部分 - 所以如果你要覆盖android设置,那么你应该把这个注册保持为单身。


总的来说,我担心目前只能在MvvmCross中告诉接口或对象是注册为单例还是动态创建点播对象 - 来查看源代码

将来,这可能是通过XML注释或通过某种命名约定来实现的,但我不认为这些是当前计划的,并且这些技术都不会被编译时检查。