C# IMvxAndroidCurrentTopActivity是单例吗?

C# IMvxAndroidCurrentTopActivity是单例吗?,c#,xamarin.android,xamarin,mvvmcross,C#,Xamarin.android,Xamarin,Mvvmcross,IMvxAndroidCurrentTopActivity可用于获取MvvmCross Android应用程序中的当前顶级活动 问题是:MvvmCross是否会在顶级活动更改后立即创建此接口的新实例,还是会重用同一实例,只更改活动属性 背景:我想将该接口作为注册为singleton的类中的构造函数依赖项。 它会工作吗?在默认的MvvmCross设置中,该接口是作为一个单例实现的,因此只要你的应用程序在内存中,它就保证返回相同的实例 请参见中的初始化平台服务 protectedoverride v

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

问题是:MvvmCross是否会在顶级活动更改后立即创建此接口的新实例,还是会重用同一实例,只更改
活动
属性

背景:我想将该接口作为注册为singleton的类中的构造函数依赖项。

它会工作吗?

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

请参见中的
初始化平台服务

protectedoverride void InitializePlatformServices()
{
var lifetimeMonitor=new MvxAndroidLifetimeMonitor();
Mvx.RegisterSingleton(生命周期监视器);
Mvx.RegisterSingleton(生命周期监视器);
Mvx.RegisterSingleton(生命周期监视器);
Mvx.RegisterSingleton(本);
var intentResultRouter=new MvxIntentResultSink();
Mvx.RegisterSingleton(intentResultRouter);
Mvx.RegisterSingleton(intentResultRouter);
var viewModelTemporaryCache=new MvxSingleViewModelCache();
RegisterSingleton(viewModelTemporaryCache);
}
这种单例特性实际上是这个接口定义的一部分——因此,如果您要覆盖android设置,那么您应该将此注册保持为单例


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

  • e、 g

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

感谢您的详细回答:-)
    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);
    }