【发布时间】:2016-06-08 14:54:46
【问题描述】:
我无法将 System.Net.Sockets 添加到 Xamarin PCL 项目中,这可以使用“诱饵和切换”AKA 高级 PCL 方法来完成吗?
System.Net.Sockets 可用于 Xamarin.iOS 和 Xamarin.Android 项目
【问题讨论】:
标签: c# sockets xamarin xamarin.forms portable-class-library
我无法将 System.Net.Sockets 添加到 Xamarin PCL 项目中,这可以使用“诱饵和切换”AKA 高级 PCL 方法来完成吗?
System.Net.Sockets 可用于 Xamarin.iOS 和 Xamarin.Android 项目
【问题讨论】:
标签: c# sockets xamarin xamarin.forms portable-class-library
是的,这是可能的。我们使用的方法是制作单独的 iOS 和 Android 类库,这些库将包含无法从 PCL 访问的非 UI 类型代码,并让这些代码实现可从共享 PCL 层访问的接口。
例如:
在Shared PCL项目中创建ISocketHandler,它有OpenConnection方法。
创建一个 iOS.Framework 类库,并在其中创建一个 iOSSocketHandler 类,该类实现 ISocketHandler 并具有在 Xamarin iOS 中使用套接字的平台特定代码。对 Android 执行相同操作。
然后你需要依赖注入,这样每当你的共享代码请求 ISocketHandler 时,它们就会得到适当的实现。我们使用 Unity,在 Main.cs 中我们将像这样注册:
IocContainer.GetContainer().RegisterType<ISocketHandler, iOSSocketHandler>();
然后在您的共享代码中,您可以像这样请求实现:
IocContainer.GetContainer().Resolve<ISocketHandler>();
还有其他策略可以实现您想要的,但这是我们在大多数情况下使用的。
另外,在尝试自己执行此操作之前,您可能需要查看https://github.com/rdavisau/sockets-for-pcl
【讨论】: