从PCL Project调用UI项目中定义的方法

时间:2017-09-03 04:31:02

标签: c# android xamarin.android mvvmcross

我正在使用MvvmCross框架,我想从Core项目中调用Android项目中定义的方法。我尝试了This解决方案但是我收到了以下错误

  

未处理的例外情况:       System.InvalidOperationException:你必须调用Xamarin.Forms.Init();在使用之前。发生

由于我没有使用Xamarin Forms,所以我知道这不起作用。是否有任何解决方法或任何其他方法来实现这一目标?

2 个答案:

答案 0 :(得分:0)

DependencyService是Xamarin Forms中的一项功能。如果你正在使用MvvmCross,你应该研究MvvmCross的依赖注入。 https://www.mvvmcross.com/documentation/fundamentals/dependency-injection

答案 1 :(得分:0)

最后,找到了答案。以下是步骤

- 获取nuget包" Xamarin.Forms.Labs"在你的android(UI)项目中,显然现在是Scorchio.NinjaCoder.Xamarin.Forms.Labs

II - 在SetUp.cs中使用以下代码,如下所示

using Android.Content;
using MvvmCross.Core.ViewModels;
using MvvmCross.Droid.Platform;
using Xamarin.Forms.Labs.Services;

namespace SomeProject.UI.Droid
{
    public class Setup : MvxAndroidSetup
    {

        public Setup(Context applicationContext) : base(applicationContext)
        {
            var resolverContainer = new SimpleContainer();
            resolverContainer.Register<IViewMethodCallService>(t => new ViewMethodCallService());
            Resolver.SetResolver(resolverContainer.GetResolver());
        }

        protected override IMvxApplication CreateApp()
        {
            return new App();
        }
    }
}

其中&#34; IViewMethodCallService &#34;是接口,具有例如方法的签名。您的PCL项目中的 TestMethod()和&#34; ViewMethodCallService.cs &#34;是在UI或Android项目中实现该接口。

III - 现在创建一个界面对象&#34; IViewMethodCallService &#34;如下图所示

IViewMethodCallService callMethod= Resolver.Resolve<IViewMethodCallService>();
callMethod.TestMethod();

&#34; ViewMethodCallService.cs &#34;看起来像这样

using Android.Util;

[assembly: Xamarin.Forms.Dependency(typeof(ViewMethodCallService))]
namespace SomeProject.UI.Droid
{    
    public class ViewMethodCallService : Java.Lang.Object, IViewMethodCallService
    {
        public ViewMethodCallService()
        {

        }

        public void TestMethod()
        {
            Log.Info("Hurrayyyyyyyyyyyyyyyyyyyyyyyyyy", "And I am calling this service");
        }
    }
}

如果您想进行更多研究,我从this question得到了这个答案以及所提到的链接。希望这有助于某人。