Android后台服务提供的Prism DI容器

时间:2018-10-26 19:08:00

标签: xamarin.forms xamarin.android prism

我的应用程序具有可以独立于主应用程序(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

但是,在我的情况下,如果运行该服务时未打开应用本身,则该应用可能不存在。

1 个答案:

答案 0 :(得分:3)

如果App.Current为空,则有两种选择。

1)在后台服务中初始化该应用程序的新实例:

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