2017-09-03 4 views
0

PCL J'utilise le cadre MvvmCross et je veux invoquer une méthode définie dans le projet Android de projet de base. J'ai essayé solution This mais je reçois l'erreur suivanteInvoquer une méthode définie dans le projet de l'interface utilisateur du projet

Exception non gérée: System.InvalidOperationException: Vous devez appeler Xamarin.Forms.Init(); avant de l'utiliser. s'est produite

Comme je n'utilise pas Xamarin Forms, je sais que cela ne fonctionnera pas. Y at-il une solution de contournement ou tout autre moyen pour accomplir cela?

Répondre

0

Enfin, a trouvé la réponse. Voici les étapes

Je - Obtenez le paquet NuGet "Xamarin.Forms.Labs" dans votre Android (UI) projet, semble-t-il maintenant est Scorchio.NinjaCoder.Xamarin.Forms.Labs

II - utiliser le code suivant dans SetUp.cs comme indiqué ci-dessous

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

Où "IViewMethodCallService" est l'interface, ayant la signature de la méthode, par exemple TestMethod(), dans votre projet PCL et "ViewMethodCallService.cs" est mise en œuvre de cette interface dans l'interface utilisateur ou d'un projet Android.

III - créer un objet de l'interface "IViewMethodCallService" comme indiqué ci-dessous

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

Les "ViewMethodCallService.cs" ressemble à ceci

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

Je suis cette réponse de this question et le lien mentionné en question si vous souhaitez faire plus de recherche. J'espère que ça aide quelqu'un.

0

DependencyService est une fonctionnalité dans les formes Xamarin. Si vous utilisez MvvmCross, vous devriez regarder dans l'injection de dépendance à partir de MvvmCross. https://www.mvvmcross.com/documentation/fundamentals/dependency-injection

+0

Merci ** lowleetak ** pour votre réponse, mais si j'utilise l'injection de dépendance alors entrer dans une autre question à savoir comment référencer une classe d'interface utilisateur dans App.cs de PCL? Parce que cela entraînerait une dépendance circulaire et VS ne le permettra pas. Ce serait bien si vous pouviez fournir un petit exemple comme référence. –

+0

Vous devrez être plus précis sur ce que vous essayez d'accomplir afin que nous puissions vous fournir plus de détails. – lowleetak