Xamarin 是自定义渲染器的DependencyService替换吗

Xamarin 是自定义渲染器的DependencyService替换吗,xamarin,xamarin.forms,custom-renderer,Xamarin,Xamarin.forms,Custom Renderer,我对DependencyService与CustomRenderer相比有点困惑 我们是否可以使用DependencyService代替CustomRenderer。我们在哪里可以使用依赖服务?TL/DR:不,它们有不同的用例,尽管它们都提供了访问目标系统功能的方法 cutom渲染器的概念直接耦合到用户界面元素。基本上,对于每种Xamarin.Forms控件,都有一个自定义的呈现器,它将控件的呈现委托给系统UI框架。通常,它将Xamarin.Forms控件映射到本机UI元素 依赖关系(通过依赖关

我对
DependencyService
CustomRenderer
相比有点困惑


我们是否可以使用
DependencyService
代替
CustomRenderer
。我们在哪里可以使用依赖服务?

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

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


依赖关系(通过依赖关系服务解决)更像是特定于平台的功能的一般概念(实际上并不限于特定于平台的实现)。您将定义一个抽象功能的接口,并为其提供特定于平台的实现。实现此接口并通过
DependencyAttribute
暴露于
DependencyService
的平台特定类可以在运行时使用
DependencyService.Get()
(其中
T
必须是您的接口类型)。可以使用从
Get
检索的对象,而不知道是哪个类准确地实现了接口。它是一种非常基本的依赖注入(不是真的,但有点),可以用于需要特定于平台的实现的任何功能,而不仅仅是UI

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

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


依赖关系(通过依赖关系服务解决)更像是特定于平台的功能的一般概念(实际上并不限于特定于平台的实现)。您将定义一个抽象功能的接口,并为其提供特定于平台的实现。实现此接口并通过
DependencyAttribute
暴露于
DependencyService
的平台特定类可以在运行时使用
DependencyService.Get()
(其中
T
必须是您的接口类型)。可以使用从
Get
检索的对象,而不知道是哪个类准确地实现了接口。它是一种非常基本的依赖注入(不是真的,但有点),可以用于需要特定于平台的实现的任何功能,而不仅仅是UI

谢谢你的回答。我们不能将
DependencyService
与UI一起使用吗?正如您所说,我们可以将
DependencyService
与特定于平台的功能结合使用,请您列举一些。常见的例子是语音测试。在过去,您可能已经使用
DependencyService
实现了
LocationService
(适用于GPS),共享文件将是另一个特定于平台的功能,……好吧,我假设您可以通过这种方式实现一些UI内容,但我真的不知道,您是否会以某种方式妨碍Xamarin.Forms。您有什么理由希望在自定义渲染器上使用它吗?我没有任何具体的说明。但看看答案。Dep服务部能在这里提供任何帮助吗?TBH:我不知道。这需要深入研究macOS用户界面编程。谢谢你的回答。我们不能将
DependencyService
与UI一起使用吗?正如您所说,我们可以将
DependencyService
与特定于平台的功能结合使用,请您列举一些。常见的例子是语音测试。在过去,您可能已经使用
DependencyService
实现了
LocationService
(适用于GPS),共享文件将是另一个特定于平台的功能,……好吧,我假设您可以通过这种方式实现一些UI内容,但我真的不知道,您是否会以某种方式妨碍Xamarin.Forms。您有什么理由希望在自定义渲染器上使用它吗?我没有任何具体的说明。但看看答案。Dep服务部能在这里提供任何帮助吗?TBH:我不知道。这需要深入研究macOS UI编程的深度。