如何在 Xamarin Forms XLabs 中使用 INetwork?

How can I use INetwork in Xamarin Forms XLabs?

我在使用来自 XLabs.Platform 的 INetwork 时遇到问题。我得到 System.NullReferenceException。我不确定问题是否类似于 需要初始化 INetwork 的地方。但是,因为我是 Xamarin 的新手,所以我不知道如何设置 IOC 容器。我希望以一种完全跨平台的方式实现这一点(如果可以避免的话,我想避免放置特定于平台的代码)。谢谢!!

代码:

using XLabs.Ioc;
using XLabs.Platform;
...
namespace XXX
{
   class XXX
    {
    public static bool isOnline()
    {

        var networkservice = DependencyService.Get<XLabs.Platform.Services.INetwork>();
        var status = networkservice.InternetConnectionStatus();
        return (
            (status.Equals(XLabs.Platform.Services.NetworkStatus.ReachableViaCarrierDataNetwork))
            || (status.Equals(XLabs.Platform.Services.NetworkStatus.ReachableViaWiFiNetwork))
            || (status.Equals(XLabs.Platform.Services.NetworkStatus.ReachableViaUnknownNetwork)));
    }

}

}

PS 使用 XLabs.Platform 的文档已过时。 (显然)以前正常工作的 Reachability 接口不再工作了。考虑使用 this instead. This is an approach that requires cross platform code. Not going to use this 作为作者自己disses 的方法。

您通过添加此属性来填充 ioc:

[assembly: Xamarin.Forms.Dependency(typeof(NameOfClassImplementingAnInterface))]

如果你想检查是否有任何互联网连接,我建议使用 Connectivity Plugin(Xamarin 组件)。添加 Xaamrin 组件后,您可以检查 PCL/Shared 项目是否可以连接互联网,如下所示

if (CrossConnectivity.Current.IsConnected)
{ // Make API call here 
} 
else 
      DisplayAlert("Connectivity Issue", "Please Connect to a Network", "OK") ;