首页 > 解决方案 > Prism.Forms DI:如何避免多个单例实例?

问题描述

假设我们有一个接口 IPushNotificationService,它由 PushNotificationService 实现,并且应该作为我的 Prism.Forms 应用程序中的单例服务存在。

在 RegisterTypes 方法中注册此服务的正确方法是什么,以便我们始终只有一个实例?

方法 1: 覆盖 RegisterTypes 并调用 RegisterSingleton。

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.RegisterSingleton<IPushNotificationService, PushNotificationService>();
}

方法 2: 覆盖 RegisterTypes 并检查服务是否已注册。如果是,它还没有出现在 DI 容器中,请调用 RegisterSingleton。

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    if (!containerRegistry.IsRegistered<IPushNotificationService>())
    {
        containerRegistry.RegisterSingleton<IPushNotificationService, PushNotificationService>();
    }
}

其他方法?- 最终目标是在特定时间拥有单一注册服务的单个实例。如果我使用 Xamarin Android 中的后退按钮导航回来,然后重新启动应用程序,我将获得单例注册服务的多个实例。我怎样才能避免这种情况?

标签: androidxamarinxamarin.formsprism

解决方案


推荐阅读