2016-02-06 2 views
0

Я создаю приложение с Xamarin, используя проект PCL, поэтому у меня есть моя основная функциональность, с реализацией на платформе в разных проектах. Я использую структуру MVVM, но с Xamarin у меня сложные вещи. Я использую Xamarin.Auth, который позволяет входам OAuth2, но доступен только в проектах .ios и .droid.MVVM Xamarin app

Итак, у меня есть «Войти?»? подскажите на вид в основном проекте. Затем я перехожу к конкретному проекту платформы, который вызывает пользовательский рендеринг (модель показана 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 

Каков правильный способ сделать это? Использовать общедоступные переменные, чтобы сообщить об этом, передать данные через? и т. д. Какое простейшее решение?

+0

Что вы имеете в виде, _ «правильным способом сделать это» _ и _ «чтобы сообщить об этом» _? Что такое «это» в вашем случае? Вам нужно передать токен для дальнейшего использования? Не совсем понятно, чего вы хотите достичь. – Demitrian

+0

@ Demitrian Я имею в виду, что является типичным способом решения моей проблемы в MVVM. Я пытаюсь использовать разные значения OAuth для выбранного провайдера –

ответ

0

Вы должны создать класс зависимостей, это правильный путь.

Не используйте средство визуализации, выполняйте всю визуальную работу, если это возможно, в ядре и дайте спецификацию OAuth классу.

Для этого вы создаете интерфейс, раскрывающий методы, которые необходимо использовать, а затем в конкретных проектах, которые вы создаете для класса, реализующего интерфейс, и украшен атрибутом Dependency.

Когда вам нужно использовать его, вы запрашиваете DependencyService для экземпляра вашего интерфейса, и он будет извлекать правильный класс из определенных проектов.

Вот документация о DependencyService: https://developer.xamarin.com/guides/xamarin-forms/dependency-service/

1

Обычно вы должны создать интерфейс в PCL, а затем создавать классы в проектах, реализующих платформу, которые его реализуют.

В вашем случае, это может быть что-то вроде этого

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

AuthenticateResult должен быть класс, который также доступен в PCL. Как только вы это получили, вы просто вводите интерфейс в свои модели просмотра. Обратите внимание, что вам необходимо зарегистрировать реализацию интерфейса в проекте, ориентированном на платформу.

MVVMCross - относительно хорошая структура, которая может помочь вам в достижении того, чего вы пытаетесь достичь.

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