Xamarin.Forms依赖服务UWP:methodNotFoundException

时间:2016-11-02 10:09:01

标签: c# service dependency-injection xamarin.forms portable-class-library

我有一个针对Android,iOS,UWP和Windows10的Xamarin Forms便携式项目。我想从Portable项目中调用特定的平台代码(UWP,Android,iOS,win10)。谷歌围绕它似乎可以使用Dependency Service完成。 我在调用UWP代码时遇到了一些问题。在本教程之后,我在Portable项目中创建了一个接口,如下所示:

namespace PushClient
{
    public interface IWebSocket
    {

        void test();

    }
} 

然后在UWP项目中我创建了一个实现接口的类:

[assembly: Xamarin.Forms.Dependency(typeof(PushClient.UWP.WebSocketUWP))]
namespace PushClient.UWP
{
    public class WebSocketUWP : IWebSocket
    {
        public WebSocketUWP() {}
        public void test() { System.Diagnostics.Debug.WriteLine("UWP TEST"); }

    }
}

然后在UWP项目的App.xaml.cs文件中,我已经注册了依赖项,如下所示:

        protected override void OnLaunched(LaunchActivatedEventArgs e)
        {

#if DEBUG
            if (System.Diagnostics.Debugger.IsAttached)
            {
                this.DebugSettings.EnableFrameRateCounter = true;
            }
#endif



            List<Assembly> assembliesToInclude = new List<Assembly>();


            assembliesToInclude.Add(typeof(WebSocketUWP).GetTypeInfo().Assembly);

            Xamarin.Forms.Forms.Init(e, assembliesToInclude);


            Xamarin.Forms.DependencyService.Register<IWebSocket>();

// [...]

}

当我尝试从便携式项目中的共享代码调用UWP测试方法时如此

DependencyService.Get<IWebSocket>().test();

抛出methodNotFoundException。我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题之后有点长,但答案可能仍然对某人有任何兴趣。 在UWP中,你必须进行2次注册,一次像其他具有汇编属性的平台,还要另外一次&#34;手动&#34;在app.xaml.cs。

在上面的代码中,错误的部分是在app.xaml.cs中为接口完成注册...这不是必须注册的接口,而是UWP的实现类。

也许这将拯救某人的某一天,某一天,某个地方或其他地方,谁知道......