与DependencyService
相比,我对CustomRenderer
有点困惑。
我们可以使用DependencyService
代替CustomRenderer
吗?我们在哪里可以使用DependencyService
?
答案 0 :(得分:2)
TL / DR:不,它们都有不同的用例,尽管它们都提供了访问目标系统功能的方法。
<皮肤>渲染器的概念直接与用户界面元素联系在一起。基本上,每种Xamarin.Forms控件都有一个自定义渲染器,该渲染器将控件的渲染委托给系统UI框架。通常,它将Xamarin.Forms控件映射到本机UI元素。
依赖(通过依赖服务解决)更像是平台特定功能的一般概念(实际上,它不限于平台特定的实现)。您定义一个抽象功能的接口,为此将提供平台特定的实现。可以使用DependencyService
(其中DependencyAttribute
必须是您的接口类型)在运行时解析实现此接口并通过DependencyService.Get<T>()
公开给T
的特定于平台的类。从Get
检索的对象可以使用,而无需知道哪个类确切地实现了该接口。这是一种非常基本的依赖项注入(嗯,不是真的,但是有点),可以用于需要平台特定实现的任何功能,而不仅用于UI问题。