Xamarin Abhängigkeit-Dienst-Problem
In Xamarin Forms habe ich eine Lösung wie diese:
Solution
|- Libraries
| |- IInterface.cs
| |- Etc.
|
|- Libraries.iOS
| |- Interface.cs
| |- Etc.
|
|- Forms.App
| |- App.cs
| |- Etc.
|
|- Forms.App.iOS
| |- Etc.
- Formen.App.iOS Verweise Bibliotheken.iOS
- Formen.App Referenzen Bibliotheken
- Bibliotheken.iOS Verweise Bibliotheken
- Formen.App.iOS-Verweise Formen.App
IInterface.cs
namespace a
{
public interface IInterface
{
void Function ();
}
}
- Schnittstelle.cs
[assembly: Xamarin.Forms.Dependency(typeof(a.Interface))]
namespace a
{
public class Interface : IInterface
{
public void Function ()
{
return;
}
}
}
App.cs
namespace a
{
public class App
{
public static Page GetMainPage ()
{
var inter = DependencyService.Get<IInterface> (); //This is always null.
return new ContentPage {
Content = new Label {
Text = "Hello, Forms!",
VerticalOptions = LayoutOptions.CenterAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
},
};
}
}
}
Wie kann ich die Abhängigkeit Dienst suchen, meine Interface-Implementierung?
Ich muss Ihnen in einem separaten Projekt, denn ich muss die gleichen Implementierungen in verschiedenen Projekten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich
[assembly: Dependency(typeof(TestService.IMyService))]
wo ich hätte
[assembly: Dependency(typeof(TestService.iOS.MyService))]
Also immer auf die Implementierung und nicht das interface in Ihre Plattform-spezifischen code! Ansonsten bekommst du
Hinzufügen von ein wenig mehr Informationen.
Es scheint ein Fehler im Zusammenhang mit der Verknüpfung in die Bibliothek, definiert die Abhängigkeit service wie beschrieben hier.
Ich das Problem gelöst, indem die Instanziierung der iOS-Implementierung des dependency-Dienst manuell.
In Ihrem iOS-Projekt in der AppDelegate.cs, FinishedLaunching-Methode, erstellen Sie ein Objekt der iOS dependency-service-Umsetzung, z.B.
Dass für mich gearbeitet.
Ist es, weil Ihre Schnittstelle.cs-Implementierung nicht über einen leeren Konstruktor.
Für die DependencyService zu arbeiten, MÜSSEN Sie einen leeren Konstruktor, wie folgt:
Ihrigen Formen.App-Lösung haben, verweisen die Lösung mit dem Interface-Deklarationen.
Wenn Sie sich null für Ihre Abhängigkeit, ein weiterer Grund kann sein, dass dein Typ ist ähnlich benannt wie Ihr service und die falsche Art erklärt wird, in Abhängigkeit. Zumindest war das bei mir der Fall.
Gelöst, indem Sie eine statische Klasse und eine leere Init-Methode. Und rufen Sie die Methode am Anfang der AppDelegate.FinishedLaunching Methode.
Vielleicht stellen Sie sicher, Referenz sowohl in der PCL-Bibliothek und die cross-Plattform-Bibliothek
Dieser arbeitete für mich