我安装了最新的Xamarin Alpha,无法使UWP和DependencyService正常工作。
在UWP项目中我有:
Forms.Init(e);
// For release version, doc said debug will do this itself
DependencyService.Register<SpecialInterface>();
IInterface1 iinterface1 = DependencyService.Get<IInterface1>();
这确实找到了界面指针。
在PCL中我有:
IInterface1 iinterface1 = DependencyService.Get<IInterface1>();
在PCL中包含的视图模型中(单击按钮后),无法在UWP和Android上为null
调用返回Get<IInterface1>()
值。
以下是UWP项目中包含的实现:
using PrismUnityApp2.UWP;
using SharedProject1;
using Xamarin.Forms;
[assembly: Dependency(typeof(SpecialInterface))]
namespace PrismUnityApp2.UWP
{
public class SpecialInterface : IInterface1
{
public SpecialInterface() { }
public int TestMethod(int i)
{
return i;
}
}
}
最后,接口在共享项目中定义如下:
namespace SharedProject1
{
internal interface IInterface1
{
int TestMethod(int i);
}
}
我在Android中使用“UsingDependencyService”示例,WinPhone失败,因为HyperV已关闭Android。
我错过了什么?
感谢您的帮助。
使用以下包/版本:
Windows 10 UWP
public void OnNavigatedTo(NavigationParameters parameters)
{
if (parameters.ContainsKey("title"))
Title = (string) parameters["title"] + " and Prism";
IInterface1 iinterface1 = DependencyService.Get<IInterface1>();
if (iinterface1 != null)
{
int value = iinterface1.TestMethod(1);
Title += " ::: " + value;
}
}
答案 0 :(得分:2)
DependencyService.Get<IInterface1>()
调用在PCL中返回null,因为它正在查找实际被定义多次的IInterface1
的不同版本。
因为IInterface1
位于共享项目中,PCL项目和UWP&amp; Android项目,它与在具有相同名称和签名的PCL和app项目中单独创建界面基本相同。但是,父程序集不同。
如果您要将IInterface1
移动到现有PCL或现有PCL和您的应用项目引用的单独PCL中,DependencyService
应该能够找到您的平台特定实施,{ {1}},正如所料。
答案 1 :(得分:0)
如果有人在Xamarin,iOS上提到空结果: ImagePickerService
<强> DependencyService.Get(); 强>
我错过了包括的内容,
Xamarin.Forms.DependencyService.Register<Xamarin.Forms.ImagePicker.IImagePickerService, Xamarin.Forms.ImagePicker.iOS.ImagePickerService>();
在AppDelegate上,FinishedLaunching方法。
参考:https://github.com/matheusneder/Xamarin.Forms.ImagePicker
答案 2 :(得分:0)
检查您的类属性并将构建操作设置为 Compile 或 Embedded Resource 。 它会好的。