2017-09-03 76 views
0

我正在使用MvvmCross框架,我想從Core項目中調用Android項目中定義的方法。我試圖This解決辦法,但我收到以下錯誤調用PCL項目中UI項目中定義的方法

未處理的異常: System.InvalidOperationException:您必須調用Xamarin.Forms.Init();在使用之前。發生

因爲我沒有使用Xamarin表格,所以我知道這是行不通的。有沒有任何解決方法或任何其他方式來實現這一目標?

回答

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(); 
     } 
    } 
} 

其中「IViewMethodCallService」是接口,具有該方法例如的簽名TestMethod(),在您的PCL項目和「ViewMethodCallService.cs」是在UI或Android項目中實現該接口。

III - 現在創建界面 「IViewMethodCallService」 的對象如下圖所示

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

的 「ViewMethodCallService.cs」 看起來像這樣

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和鏈接提到的問題,如果你想做更多的研究。希望這可以幫助別人。

0

DependencyService是Xamarin Forms中的一個功能。如果您正在使用MvvmCross,則應該查看MvvmCross的依賴注入。 https://www.mvvmcross.com/documentation/fundamentals/dependency-injection

+0

謝謝** lowleetak **爲您的答案,但如果我使用依賴注入然後我進入另一個問題,即如何引用PCL的App.cs中的UI類? 因爲這會導致循環依賴和VS不會允許它。如果你能提供一個小例子作爲參考,那將是非常好的。 –

+0

您需要更具體地瞭解您嘗試實現的目標,以便我們提供更多詳細的答案 – lowleetak

相關問題