Как получить инъекцию зависимости, работающую на Prism для Xamarin? - PullRequest
0 голосов
/ 10 июня 2018

У меня есть приложение, которое я портирую на Prism (из XamVvm).Я использую DryIoC.

Мой интерфейс выглядит следующим образом

[assembly: Dependency(typeof(IJoinCongregation))]
namespace MapManPrism.Services
{
public interface IJoinCongregation
{
    Task<bool> JoinCongregation(int Identifier, int PIN);
    Task<bool> CheckForMapUpdates();
    Task<Models.API.Publisher> PostPublisher(string name, string phone, int congregationid);

}

Класс, реализующий этот интерфейс, выглядит следующим образом

public class JoinCongregation : IJoinCongregation
{
    private readonly string JoinCongregationAction = $"{EnvironmentConfiguration.WebEndPoint}Congregations/AuthoriseCongregation";
    private readonly string RegisterPublisherAction = $"{EnvironmentConfiguration.WebEndPoint}Publisher/EnrolPublisher";


    private readonly IFileStorage _fileStorage;
    private readonly IDatabaseService _database;


    public JoinCongregation(IFileStorage fileStorage, IDatabaseService database)
    {
        //var container = new Container();
        //container.resolve
        _fileStorage = fileStorage;
        _database = database;
    }

Однако, когда код моего конструкторазапускается в моей странице viewmodel (которая называется WelcomeWizardPageViewModel), она не может разрешить конкретную реализацию IJoinCongregation.Это заставляет DryIoC выдавать ошибку с превышением времени ожидания.

Код конструктора выглядит следующим образом ...

public WelcomeWizardPageViewModel(IJoinCongregation congregation)
    {
        //var container = new Container();
        //new DatabaseService(); // runs constructor code which we need
        _congregation = congregation;
 ...

Что я делаю не так?Это мои догадки.

  1. Я неправильно регистрирую службы
  2. Я неправильно перетаскиваю эти службы в другие службы
  3. Используя [сборку: Зависимость (typeof (IJoinCongregation))] в моих службах Я каким-то образом смешиваю DI Xamarin и DI DryIoC (я пытался исключить это безрезультатно)

Любая помощь будет , поэтому очень признателен.Спасибо.

РЕДАКТИРОВАТЬ: Вот как службы регистрируются в первую очередь:

 protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.RegisterForNavigation<NavigationPage>();
            containerRegistry.RegisterForNavigation<MainPage>();
            containerRegistry.RegisterForNavigation<WelcomeWizardPage>();
             containerRegistry.RegisterForNavigation<SettingsPage>();
            //containerRegistry.RegisterForNavigation<WelcomeWizard>();
            //containerRegistry.register
            //containerRegistry.RegisterType<IFileStorage, FileStorage>();
            containerRegistry.Register<ICartService, CartService>();
            containerRegistry.Register<IDatabaseService, DatabaseService>();
            containerRegistry.Register<IJoinCongregation, JoinCongregation>();
            containerRegistry.Register<IMapService, MapService>();



        }

1 Ответ

0 голосов
/ 10 июня 2018

В конце концов, я просто забыл зарегистрировать зависимую службу.Вот как я это исправил.

Определите, какие зависимости была у модели представления страницы, а затем установите для них значение null в модели представления страницы, чтобы убедиться, что модель представления страницы работает, и автоматическое разрешение модели представления.,Это работало, поэтому это должно было быть что-то еще.

Извлеките обе службы из конструктора для модели представления страницы.Это также сработало.

Добавьте один сервис обратно в модель просмотра страницы.Это все еще работало.

Добавил второй сервис к модели просмотра страницы, колеса оторвались от него, и он сломался с ошибкой DryIoC.

Перешел к службе, которая делала это, и проверил его зависимости.

Одна из ее зависимостей не была зарегистрирована в DryIoC.Добавил его и вещь ожила вздох .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...