是自定义渲染器的 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 关注点。
与 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 关注点。