从共享

时间:2018-09-17 11:40:04

标签: xamarin xamarin.forms xamarin.ios xamarin.android

我有这段代码可以在 iOS 中运行:

  namespace Login.iOS
    {
    class Authenticate
    {
        public async Task LoginAsync()
        {
            var client = new Auth0Client(new Auth0ClientOptions

            {
                Domain = "difiore.auth0.com",
                ClientId = "Key goes here"
            });

                var loginResult = await client.LoginAsync();
            }
        }
    }

以及 Android 的等效项:

    namespace Login.Droid
    {
    class Authenticate
    {
        public async Task LoginAsync()
        {
            var client = new Auth0Client(new Auth0ClientOptions

            {
                Domain = "difiore.auth0.com",
                ClientId = "Key goes here"
            });

            var loginResult = await client.LoginAsync();
        }
    }
}

由于两者都依赖于专门为平台编写的库,因此它们必须特定于平台。

然后,我有了应该随后调用的共享代码:

    namespace Login
    {
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class MainPage : ContentPage
    {
        public MainPage ()
        {
            InitializeComponent ();
        }

        private void Login_Clicked(object sender, EventArgs e)
        {
            Navigation.PushAsync(new Authenticate());
        }
    }
}

但是代码行

Navigation.PushAsync(new Authenticate());

显然是错误的,因为它无法识别要调用的例程。

如何从共享程序中调用特定于平台的例程?这是IOS和Android中的 Authenticate 类。

1 个答案:

答案 0 :(得分:2)

您必须创建一个界面,以使用 Dependency Injection 调用共享或可移植类中特定于平台的类。点击此链接 https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/introduction。我希望这会有所帮助。