gpt4 book ai didi

c# - IMvxAndroidCurrentTopActivity 是单例吗?

转载 作者:行者123 更新时间:2023-11-30 19:27:49 32 4
gpt4 key购买 nike

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

问题是:MvvmCross 会在顶级 Activity 发生变化时立即创建此接口(interface)的新实例,还是会重用相同实例并仅更改 Activity 属性.

背景:我想将该接口(interface)作为注册为单例的类中的构造函数依赖项。
会成功吗?

最佳答案

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

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

这种单例性质实际上是该接口(interface)定义的一部分 - 所以如果您要覆盖 android 设置,那么您真的应该将此注册保持为单例。


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

在未来,这可能会通过 XML 注释或某种命名约定来实现,但我认为目前没有这些计划,而且这些技术都不会在编译时检查。

关于c# - IMvxAndroidCurrentTopActivity 是单例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17466488/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com