在docs中明确指出,您需要针对所有平台实施:
您必须在每个平台项目中提供实施。如果不 接口实现已注册,然后是
DependencyService
将无法在运行时解析Get<T>()
方法。
我还没有提供实施,因此应用程序崩溃了。但是,我应该怎么做,我不需要为该平台实施?提供像这样的无体方法?
public void HideKeyboard()
{
// We need an implementation for the DependencyService, even it is empty.
}
我是否应该提供实施?
public void HideKeyboard()
{
try
{
InputPane myInputPane = InputPane.GetForCurrentView();
myInputPane.TryHide();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
或者DependencyService
使用了错误的选项吗?
答案 0 :(得分:2)
我假设您不需要在一个平台上实现,但在另一个平台上执行。
你基本上可以做两件事:
如果您只在iOS上使用它,请在共享代码中执行此操作:
if (Device.RuntimePlatform == Device.iOS)
DependencyService.Get<IKeyboardService>().HideKeyboard();
这样您就不会使用冗余类来丢弃代码。您需要在所有位置添加此项,以便执行此代码。那么更好的选择取决于你。
使用DependencyService并不是错误的,实际上是达到此类平台特定功能的唯一方法。
答案 1 :(得分:1)
除了two options Gerald mentioned具有无主体实现或仅在特定平台上调用Get
之外,您还可以仅检查Get
的返回值,并且仅在存在以下情况时才使用服务是一个。在代码中,应为:
var ds = DependencyService.Get<IKeyboardService>();
if (ds != null)
ds.HideKeyboard();
或单线:
DependencyService.Get<IKeyboardService>()?.HideKeyboard();