【问题标题】:Is IMvxAndroidCurrentTopActivity a singleton?IMvxAndroidCurrentTopActivity 是单例吗?
【发布时间】:2013-07-02 05:38:17
【问题描述】:

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

问题是:MvvmCross 会在 top Activity 更改后立即创建此接口的新实例,还是重用 same 实例并仅更改 Activity 属性。

背景:我想将该接口作为一个注册为单例的类中的构造函数依赖项。
它会起作用吗?

【问题讨论】:

    标签: c# xamarin.android xamarin mvvmcross


    【解决方案1】:

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

    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);
        }
    

    这种单例性质确实是此接口定义的一部分 - 因此,如果您要覆盖 android 设置,那么您应该真正将此注册保留为单例。


    在一般层面上,恐怕目前只有一种方法可以在 MvvmCross 中判断一个接口或对象是注册为单例还是注册为按需动态创建的对象 - 查看源代码

    未来,这可能会通过 XML cmets 或某种命名约定来实现,但我不相信这些是目前计划的,而且这些技术都不会在编译时检查。

    【讨论】:

    • 感谢您的详细回答:-)
    猜你喜欢
    • 2011-05-01
    • 2023-03-08
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    相关资源
    最近更新 更多