如果调用方未使用 Xamarin.Forms,Xamarin 依赖项服务能否正常工作?
Posted
技术标签:
【中文标题】如果调用方未使用 Xamarin.Forms,Xamarin 依赖项服务能否正常工作?【英文标题】:Can the Xamarin Dependency service work if the caller is not using Xamarin.Forms? 【发布时间】:2017-12-28 15:24:53 【问题描述】:简单的问题,如果调用者不是基于 Xamarin.Forms 甚至根本不是 Xamarin,Xamarin.Forms 依赖服务是否还能获取调用者的平台?
现在开始设置问题。我有两个应用项目,android 和 Windows UWP。由于各种原因,我不需要 ios,也不能将 Xamarin.Forms 用于两者。所以,我有一个本机 UWP 应用程序和 Xamarin.Android。这两者仍然可以与 PCL 或更好的 .NetStandard 共享大量代码。
如果我正在创建库,因为我松散地关注这篇帖子 Dependency Service,并且像这样的库的调用者是 Xamarin.Android 或 UWP(即不是 Xamarin Forms),那么库中的依赖服务仍然知道来电者的平台?底线是,在库中,我需要知道哪个平台正在使用或调用库,以便我可以在库中执行特定于平台的代码。
作为这个问题的后续,我看到的很多依赖服务示例都使用了 PCL。由于每个人似乎都在从 PCL 转向 .NetStandard 库,如果库是 .NetStandard,是否可以实现同样的目标?
谢谢!
【问题讨论】:
so I can do platform specific code within the library
如果您使用 PCL/NetStd 库,则没有任何意义,因为根据定义,它们与平台无关。但。如果您需要知道调用者的平台,则在方法或 .ctor 的参数中传递它,或者从 UWP/Android 设置一个公共静态变量。 DependencyService.cs
可以不用Forms吗,当然,它是一个非常简单的基于属性的DI服务,你可以从githib repo中拉取代码(和属性)`
在正常用例中,您在共享 PCL 中有一个接口,具体实现在平台代码中完成。在表单中 几乎所有代码都可以在 PCL 中完成,因此存在 DI 服务以在需要的地方获取平台实现非常重要……因为我不明白您如何将任何 UI 放在 . net 标准库,无需一些荒谬的工作即可共享。您需要分离一些关注点。
感谢两位cmets。让我澄清一下,当我按照我的帖子中提供的链接进行操作时,我说错了。 .NetStandard 或 PCL 库将独立于平台。但是,在我创建库的解决方案中,我还将拥有一个 Android 类库和一个 UWP 类库。我将在平台特定库将实现的 PCL 库中有一个接口。这是我将执行特定于平台的代码(即访问文件系统)的地方。因此,按照这种常见模式,我只是想知道如果不使用 Xamarin.forms,如何进行 DI 或 IoC(它们是否相同?)。
【参考方案1】:
如果你没有使用 Xamarin Forms 库,那么你将无法访问 DependencyService
类。
您可以使用许多其他 DI 库之一,例如与 .NET Standard 项目兼容的 Autofac。
【讨论】:
以上是关于如果调用方未使用 Xamarin.Forms,Xamarin 依赖项服务能否正常工作?的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Forms Android:获取 XA3001:无法 AOT 程序集
Xamarin.Forms - 创建新页面时 InitializeComponent 不存在
在运行时使用 Xamarin.Forms.Maps 创建折线时如何附加位置?
将方法从后面的代码转换为 ICommand 数据绑定 Xamarin.Forms