Подтвердить что ты не робот

Общая библиотека Xamarin и PCL

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

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

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

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

4b9b3361

Ответ 1

  • В общих проектах каждый файл кода будет скомпилирован для каждого адресата (Android, iOS, Windows Phone и т.д.). Вы можете включить специфический для платформы код, используя директивы #if для компилятора. Когда вы хотите получить доступ к камере, вам нужно написать код доступа внутри блока #if для всех целевых платформ. Это может испортить ваш код, но может быть проще найти различные реализации. Подробнее: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/shared_projects/
  • Protable Class Libraries (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. Поэтому вам не нужно писать собственные классы для доступа к камерам, показывать предупреждения и т.д.