Xamarin, используя геолокацию из образца Xlabs

Использование Xamarin Shared Project.

Я попытался включить в свой проект share функцию Geolocation из примера Xlabs, но у меня возникают проблемы, когда дело доходит до вызова dependencyService.

У меня есть страница контента, и там у меня есть моя кнопка, которая имеет такую ​​команду: Command = new Command(async () => await GetPosition(), () => Geolocator != null)

Команда приводит к:

private IGeolocator Geolocator
    {
        get
        {
            if (_geolocator == null)
            {
                _geolocator = DependencyService.Get<IGeolocator>();
                _geolocator.PositionError += OnListeningError;
                _geolocator.PositionChanged += OnPositionChanged;
            }
            return _geolocator;
        }
    }

и когда это должно вызвать _geolocator = DependencyService.Get<IGeolocator>(); ничего не происходит и _geolocator остается нулевым.

У меня есть все ссылки из Xlabs и интерфейс IGeolocator в моем проекте, так почему же не вызывается DependencyService??

2 ответа

Решение

Сервисы XLabs.Platform больше не (с момента обновления до 2.0) автоматически регистрируются в Xamarin.Forms.DependencyService. Это связано с удалением зависимости Xamarin.Forms от XLabs.Platform. Вы можете зарегистрировать Geolocator вручную (для каждого конкретного проекта платформы):

 DependencyService.Register<Geolocator> ();

Лучше было бы использовать абстракцию контейнера IoC, предоставляемую XLabs.IoC (включается автоматически как зависимость): https://github.com/XLabs/Xamarin-Forms-Labs/wiki/IOC

Подробнее о XLabs.IoC: http://www.codenutz.com/autofac-ninject-tinyioc-unity-with-xamarin-forms-labs-xlabs/

Второй параметр Command Constructor - это функция, которая сообщает, может ли команда быть выполнена или нет, в вашем случае вы "говорите" выполнять команду только тогда, когда Geolocator is != null, но вы инициализируете ее в своей команде, которая никогда не выполняется, потому что Geolocator имеет значение null.

Вы должны инициализировать Geolocator перед вызовом команды или удалить Geolocator is != null условие для выполнения команды.

Другие вопросы по тегам