1

为什么?

我正在尝试创建一个 Mvx 身份验证插件,以尽可能地重用现有的 3rd 方代码及其特定于平台的 UI。有一些关于如何在另一个程序集中引用特定于 Mvx 的 View/ViewModel 的帖子,但我想知道 Mvx 是否有任何方法支持导航到和/或显示它没有创建的 View/ViewModel/控制?

我想我必须以某种方式告诉 Mvx 关于“额外的外部登录视图”甚至有机会让它工作,但我不知道当我不控制特定于平台的视图/视图模型时是否可以这样做在外部 DLL 中提供。

当前无效的方法

让我们调用我的 Mvx AuthN 插件:

Acme.MvvmCross.Plugins.Authentication

这个插件的核心 PCL 只包含一些 PCL 友好的枚举、简单的 POCO 以及IAuthenticationProvider相关的特定于平台的插件项目将实现的。

随着时间的推移,可以支持各种第 3 方“身份验证网关”作为有效的特定于平台的IAuthenticationProvider接口实现。

Mvx 插件将支持的第一个第 3 方是 Windows Phone 7.5/8 和 Win8 上的“Windows Azure 移动服务 (AMS)”。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。

我可以在我的应用程序的 PCL 核心和应用程序的客户端特定项目中引用和使用上述 Mvx 插件,但我无法在 WP7 上显示特定于平台的“登录视图”(由 AMS SDK 提供) /8 客户端,当我调用 AMS 的 LoginAsync 方法时,它们只是锁定了。

例子:

如果您不使用 Mvx,AMS 示例会显示特定于客户端的项目如何调用它的共享“ LoginAsync”方法,并且通过这样做,它们提供的特定于客户端的扩展和 UI 会神奇地启动以显示身份验证提供程序的屏幕让用户登录(例如 Twitter 在手机上的 web 视图中登录)。

当我LoginAsync从我的 Mvx 应用程序调用 AMS 时LoginViewModel(通过使用我的 Mvx 插件的同一应用程序中的 Mvx 服务),AMS 提供的自定义登录 UI 不显示,客户端只是锁定。

有没有办法通过 Mvx 插件模型重用现有/正在进行的 Azure/Xamarin AMS 工作,或者这不会发生?

注意:AMS SDK 源代码可从 Microsoft 和 Xamarin 获得,但如果我必须维护这两个存储库的自定义 MVX 特定分支以使这一切按需要工作,我可能会避免这种方法。

4

1 回答 1

0

您可以执行类似于此对话框消息解决方案的操作。您基本上使用信使并在每个平台的视图中侦听 Authenticate 消息,以显示您的登录 UI 并在完成后返回一条消息。

我以类似的方式使用旧的 Azure ACS 控件(触发消息以显示它们并绑定到用户控件上的事件以获得结果)

于 2013-08-19T19:21:43.507 回答