2015-08-17 3 views
22

Какова разница между общим проектом xamarin и переносимой библиотекой классов?Общая библиотека Xamarin и PCL

Когда использовать общую библиотеку и когда использовать переносимую библиотеку классов?

Возможно ли это написать собственную функциональность в общих проектах, таких как показ оповещения, доступ к камере и использование ее как для Android, так и для iOS?

Может кто-нибудь объяснить мне.

ответ

33
  • В общих проектах каждый код файл будет составлен для каждого пункта назначения (Android, IOS, Windows Phone и т.д.). Вы можете включить конкретный код платформы, используя директивы компилятора #if. Когда вы хотите получить доступ к камере, вам необходимо написать код доступа внутри блока #if для всех целевых платформ. Это может испортить ваш код, но может быть проще найти различные реализации. Узнать больше: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/shared_projects/
  • Библиотеки защищенных классов (PCL) скомпилированы против общего подмножества .NET, которое совместимо со всеми платформами, которые вы хотите. Таким образом, вы можете получить доступ к System.Net.Http, но вы не можете получить доступ к коду конкретной платформы. Если вы хотите получить доступ к камере внутри кода PCL, вам необходимо получить к ней доступ через обобщенный интерфейс через инъекцию зависимостей. Есть довольно неплохие рамки, помогающие вам архивировать эту цель. Один из самых известных - MVVMCross (https://github.com/MvvmCross/MvvmCross/wiki). Узнать больше о PCL: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options/#Portable_Class_Libraries

Я лично пересматриваю PCL, потому что код намного проще читать без каких-либо директив-компиляторов. Используя MVVMCross, вы можете использовать множество плагинов через NuGet. Поэтому вам не нужно писать свои собственные классы для доступа к камерам, показывать предупреждения и т. Д.

+0

Wosi. Можете ли вы сделать то же самое с камерой с помощью PCL, что вы могли бы использовать код конкретной платформы? – johnny

+0

Конечно! Используя специфические для платформы реализации для доступа к камерам через инъекцию зависимостей, скрытую за независимыми от платформы интерфейсами, вы фактически используете код конкретной платформы из PCL. – Wosi

+0

Почему разработчик не хочет использовать PCL? Легче поддерживать SAP? Что-то другое? – johnny

Смежные вопросы