是自定义渲染器的 DependencyService 替代品

Is DependencyService replacement for Custom renderer

CustomRenderer 相比,我对 DependencyService 有点困惑。

我们可以用 DependencyService 代替 CustomRenderer 吗?我们可以在哪里使用 DependencyService?

TL/DR: 不,它们有不同的用例,尽管它们都提供了访问目标系统功能的方法。

自定义渲染器 的概念直接与用户界面元素相关联。基本上,对于每种 Xamarin.Forms 控件,都有一个自定义渲染器,它将控件的渲染委托给系统 UI 框架。通常它将 Xamarin.Forms 控件映射到本机 UI 元素。

A dependency(通过 dependency service 解决)更像是平台特定功能的一般概念(实际上它不限于平台特定的实现)。您定义一个抽象功能的接口,您将为其提供特定于平台的实现。实现此接口并通过 DependencyAttribute 公开给 DependencyService 的平台特定 class 可以在运行时使用 DependencyService.Get<T>() 解析(其中 T 必须是您的接口类型)。从 Get 检索到的对象可以在不知道哪个 class 准确实现接口的情况下使用。它是一种非常基本的依赖注入(好吧,不是真的,但有点)并且可以用于需要特定平台实现的任何功能,而不仅仅是 UI 关注点。