Xamarin.Forms DependencyService Get()方法在PCL中返回Null

时间:2016-06-09 20:30:15

标签: c# android xamarin xamarin.forms uwp

我安装了最新的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。

我错过了什么?

感谢您的帮助。

使用以下包/版本:

  • Prism.Unity.Forms 6.2.0.pre4
  • Prism.Forms 6.1.0.pre4
  • Xamarin.Forms 2.2.0.45
  • Unity 4.0.1
  • 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;
        }
    }
    

3 个答案:

答案 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 。 它会好的。