Я пытаюсь создать плагин аутентификации Mvx, который как можно больше повторяет существующий сторонний код и его интерфейсы для платформы. Есть несколько сообщений SO о том, как ссылаться на Mvx-вид View/ViewModel в другой сборке, но я хотел бы знать, есть ли какой-либо способ для Mvx поддерживать навигацию и/или отображение View/ViewModel, чтобы он не создавал/контроль?
Я предполагаю, что мне нужно как-то сказать Mvx о «дополнительном внешнем видении входа», чтобы даже иметь возможность работать, но я не знаю, можно ли это сделать, когда я не контролирую платформу, специфический View/ViewModel, который предоставляется во внешней DLL.
Текущий подход, который не работает
Давайте назовем мой MVX AuthN Plugin:
Acme.MvvmCross.Plugins.Authentication
ядро PCL этого плагина содержит только некоторые PCL-дружественные перечислений, просто ПОКО, и в IAuthenticationProvider
, что чем связанные с платформой проекты плагина будут реализованы.
С течением времени различные сторонние «шлюзы аутентификации» могут поддерживаться в качестве допустимых реализаций платформы для интерфейса IAuthenticationProvider
.
Первым третьим лицом, поддерживающим плагин Mvx, является «Windows Azure Mobile Services (AMS)» на Windows Phone 7.5/8 & Win8. AMS уже предоставляет C# PCL для обеспечения аутентификации на WP7/8 & Win 8: https://github.com/WindowsAzure/azure-mobile-services, и я буду беспокоиться о добавлении Xamarin-предоставленных iOS/Droid реализаций из них позже: https://github.com/xamarin/azure-mobile-services.
Подход AMS должен иметь основной PCL: Microsoft.WindowsAzure.Mobile
, и они объединяют это ядро с расширениями для платформы и представлениями UI по мере необходимости.
Пример:
Внутри WP75-конкретного проекта библиотеки моего плагина (Acme.MvvmCross.Plugins.Authentication.WindowsPhone
), это то, что ссылки AMS NuGet:
Microsoft.WindowsAzure.Mobile
Microsoft.WindowsAzure.Mobile.Ext.WP75
Microsoft.WindowsAzure.Mobile.UI.WP75
Обратите внимание, что делает ядро PCL моего плагина (Acme.MvvmCross.Plugins.Authentication
) НЕ ссылайтесь ни на одну из этих AMS DLL.
Я могу ссылаться и использовать приведенный выше Mvx-плагин в моем ядре PCL моего приложения и в проектах, специфичных для клиента приложения, НО я не могу получить «вид входа в систему» (предоставленный AMS SDK), чтобы показывая на клиентах WP7/8, они просто блокируются, когда я вызываю метод LoginAsync AMS.
Пример:
Если вы не используете MVX образцы AMS показать, как проект манданта можно просто назвать это общий метод «LoginAsync
» и, делая это, расширения специфичные для клиента и UI, что они обеспечивают волшебный удар, чтобы отобразить экран Провайдера аутентификации, чтобы позволить пользователю войти в систему (например, вход в Twitter в веб-виде на телефоне).
Когда я называю AMS-х LoginAsync
из моего MVX приложение LoginViewModel
(через службу MVX в том же приложении, которое использует мой MVX плагин), пользовательский Логин UI обеспечивается AMS не отображается, клиент просто запирает вверх.
Есть ли способ повторно использовать существующую/текущую работу Azure/Xamarin AMS через модель плагина Mvx или это не произойдет?
Примечание: Источник AMS SDK доступен как из Microsoft, так и из Xamarin, но я, скорее всего, избегу этого подхода, если мне нужно поддерживать специальные вики MVX для обоих этих репозиториев, чтобы все это работало по желанию.
Это похож на использование встроенных в Views/задач захватить фотографию? В этом случае поможет ли источник для плагина выбора изображения? Стюарт (на мобильном телефоне) – Stuart
Я не уверен. Если в конечном счете моя служба Mvx обращается к базовому «LoginAsync» (при условии, что моя плагиновая упаковка Azure DLL), которая автоматически пытается загрузить/перейти на этот PhoneApplicationPage https://github.com/WindowsAzure/azure-mobile-services/ blob/master/sdk/Managed/src/Microsoft.WindowsAzure.MobileServices.WindowsPhone8.UI/Аутентификация/АутентификацияBroker.cs # L92, если он «просто работает» или мне нужно помочь Mvx понять, как справиться с этой родной страницей WP8 чтобы показать его после того, как пользователь лижет поставщика авторизации на MvxPhonePage, который показывает список параметров входа? – Kerry
Использование плагинов MvxPictureChooser & EMail в качестве руководства, чтобы увидеть, как они использовали «MvxWindowsPhoneTask», было шагом в правильном направлении. Я смог заставить AMS-клиента окончательно отобразить экран входа в твиттер, как и ожидалось! Мне пришлось использовать параметр Action для DoWithInvalidOperationProtection, хотя в настоящее время я теряю свой возвращаемый тип и больше не проверяю ошибок. Есть некоторые вещи, которые я делал при использовании ваших плагинов в качестве руководства, которое не кажется правильным, поэтому я собираюсь его очистить, а затем спросить, правильно ли я использую Mvx, прежде чем я/мы опубликуем обновленный ответ здесь. Спасибо за подсказку! – Kerry