【问题标题】:MVVM Xamarin appMVVM Xamarin 应用程序
【发布时间】:2016-02-07 06:25:32
【问题描述】:

我正在使用 PCL 项目使用 Xamarin 构建一个应用程序,因此我在那里拥有我的核心功能,并在不同的项目中具有特定于平台的实现。我正在使用 MVVM 结构,但是使用 Xamarin 我有复杂的事情。我正在使用 Xamarin.Auth,它允许 OAuth2 登录,但它仅适用于 .ios 和 .droid 项目。

所以我有一个“登录方式?”提示核心项目中的视图。然后我转到调用自定义渲染器的平台特定项目(模型显示here)。

这是渲染器中的代码,需要根据用户选择的身份验证器“自定义”。

var auth = new OAuth2Authenticator (
                               clientId: "xxx", // your OAuth2 client id (For FB Also called App-ID)
                               scope: "", // the scopes for the particular API you're accessing, delimited by "+" symbols
                               authorizeUrl: new Uri ("https://m.facebook.com/dialog/oauth/"), // the auth URL for the service (i.e FB, Twitter)
                               redirectUrl: new Uri ("http://www.facebook.com/connect/login_success.html")); // the redirect URL for the service

这样做的正确方法是什么?我是否使用公共变量来传达这一点,传递细节?等等。什么是最简单的解决方案?

【问题讨论】:

  • 你说的“正确的做法”“传达这个”是什么意思??在您的情况下,“this” 是什么?您是否需要将令牌传回以供进一步使用?您想要实现的目标并不完全清楚。
  • @Demitrian 我的意思是在 MVVM 中处理我的问题的典型方法是什么。我正在尝试为用户选择的任何提供者使用不同的 OAuth 值

标签: c# wpf mvvm xamarin xamarin.ios


【解决方案1】:

通常您会在 PCL 中创建一个接口,然后在实现它的平台特定项目中创建类。

在你的情况下,它可能是这样的

public interface IAuthenticateService
{
       Task<AuthenticateResult> AuthenticateAsync(string clientId, CancellationToken cancellationToken)
}

AuthenticateResult 应该是一个在 PCL 中也可用的类。 一旦你明白了,你只需将接口注入到你的视图模型中。 请注意,您必须在特定于平台的项目中注册您的接口实现。

MVVMCross 是一个相对不错的框架,可以帮助您实现您想要实现的目标。

【讨论】:

    【解决方案2】:

    你必须创建一个依赖类,这是正确的方法。

    不要使用渲染器,尽可能在核心中完成所有可视化工作,并将 OAuth 的特定性交给类。

    为此,您创建一个接口,公开您需要使用的方法,然后在特定项目中创建一个实现该接口并使用 Dependency 属性修饰的类。

    当您需要使用它时,您向 DependencyService 请求接口的实例,它会从特定项目中检索正确的类。

    这里是关于 DependencyService 的文档:https://developer.xamarin.com/guides/xamarin-forms/dependency-service/

    【讨论】:

      猜你喜欢
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多