使用Xamarin共享项目。

我试图在我的共享项目中包括Xlabs示例中的Geolocation功能,但是在调用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?

最佳答案

XLabs.Platform服务不再(自更新至2.0)不再自动向Xamarin.Forms.DependencyService注册。这是由于删除了XLabs.Platform上的Xamarin.Forms依赖关系。您可以手动注册Geolocator(从每个平台特定的项目中注册):

 DependencyService.Register<Geolocator> ();


更好的选择是使用XLabs.IoC提供的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/

关于c# - Xamarin,使用Xlabs示例中的Geolocation,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30060996/

10-08 21:25