【问题标题】:Prism DI container from Android background service来自 Android 后台服务的 Prism DI 容器
【发布时间】:2019-03-31 13:56:21
【问题描述】:

我的应用有一个后台服务,可以独立于主应用 (HostApduService) 运行。

如何从该后台服务访问/使用 Prism 的 IContainer?

我知道 IContainer 可从 Xamarin.Forms.Application.Current 获得,请参阅:

https://tutel.me/c/programming/questions/45097342/implement+dependency+injection+in+background+services+in+xamarin+forms+using+prism

但是,在我的情况下,如果服务在没有启动应用程序本身的情况下运行,则应用程序可能不存在。

【问题讨论】:

  • 您是否为单独的进程提供服务?那你就不走运了。

标签: xamarin.forms xamarin.android prism


【解决方案1】:

如果App.Current 为空,您有几个选择。

1) 在你的后台服务中初始化一个新的App实例:

var app = new App();
app.Container.Resolve<IMyService>();

2) 使用仅注册您想要的内容并为您的后台服务创建所需容器的辅助方法:

public class App : PrismApplication
{
    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        RegisterBackgroundServices(containerRegistry);
    }

    public static void RegisterBackgroundServices(IContainerRegistry containerRegistry)
    {
        // Register services you need in the Background Service
    }
}

public class MyBackgroundService
{
    IContainerExtension Container { get; }
    public MyBackgroundService()
    {
        // Note: Prism has some non-default Rules in place
        Container = new DryIocContainerExtension(new Container());
        App.RegisterBackgroundServices(Container);
    }
}

【讨论】:

  • 但是应该注意,它不是应用程序的容器,而是一个不同的容器,因此对于每个单例应用程序都有一个,而服务有一个不同的容器。我想,OP 正在寻找一种在服务和应用程序之间共享容器的方法。
  • @Haukinger,如果您在应用程序本身没有运行的情况下真正有背景,那么只要您有正确的注册,您使用自己的容器就没有关系容器。我记得当有来自 Android 的活动应用程序时,您应该能够访问对 App.Current 的静态引用。
  • 那真是太酷了。有时间我会看看的。
  • 我可以确认,当应用程序处于活动状态时,后台服务共享容器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
相关资源
最近更新 更多