Контейнер Prism DI из фонового сервиса Android - PullRequest
0 голосов
/ 26 октября 2018

Мое приложение имеет фоновую службу, которая может запускаться независимо от основного приложения (HostApduService).

Как я могу получить доступ / использовать IContainer Prism из этого фонового сервиса?

Мне известно, что 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 голосов
/ 26 октября 2018

Для вас есть несколько вариантов, если 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);
    }
}
...