Xamarin.Forms DependencyService 不适用于所有平台

tes*_*ing 2 xamarin dependency-resolver xamarin.forms

文档中明确指出您需要为所有平台实现:

您必须在每个平台项目中提供一个实现。如果没有注册接口实现,则将DependencyService 无法Get<T>()在运行时解析该方法。

我没有提供实现,所以应用程序崩溃了。但是如果我不需要该平台的实现,我该怎么办?提供这样的无体方法?

public void HideKeyboard()
{
    // We need an implementation for the DependencyService, even it is empty.
}
Run Code Online (Sandbox Code Playgroud)

我应该提供一个实现吗?

public void HideKeyboard()
{
    try
    {
        InputPane myInputPane = InputPane.GetForCurrentView();
        myInputPane.TryHide();
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

还是DependencyService这里使用了错误的选项?

Ger*_*uis 5

我假设你不需要在一个平台上实现,但这样做对其他。

基本上你可以做两件事:

  • 在不需要实际实现的平台上提供无体实现,就像您自己建议的那样
  • 或者; 围绕 DependencyService 调用检查平台。

如果你只在 iOS 上需要它,就在你的共享代码中这样做:

if (Device.RuntimePlatform == Device.iOS)
    DependencyService.Get<IKeyboardService>().HideKeyboard();
Run Code Online (Sandbox Code Playgroud)

这样你就不会用多余的类来乱扔代码。您确实需要在要执行此代码的所有位置添加它。所以这里有什么更好的选择取决于你。

使用 DependencyService 并没有错,而且实际上是实现这种平台特定功能的唯一方法。