Ich bin neu in Dependency Injection und entwickle eine App mit Xamarin.Forms, Prism und Unity. Soweit ich weiß, bei der Verwendung von DI wollen Sie liefern/injizieren Dienste für Klassen, damit sie sie nicht bekommen müssen. Dies führt zu Klassen, die keine Kenntnis von Service-Implementierungen haben.Kette von Abhängigkeiten mit Unity Dependency Injection und Xamarin.Forms
Das bedeutet, Constructor Injection anstelle des Containers zu verwenden, um die Dienste aufzulösen. Auch hier zu sehen http://structuremap.github.io/quickstart.
Mein Setup:
[assembly: Xamarin.Forms.Dependency(typeof(Foo))]
public class Foo : IFoo
{
public IBar Bar { get; private set; }
public Foo(IBar bar)
{
Bar = bar;
}
}
[assembly: Xamarin.Forms.Dependency(typeof(Bar))]
public class Bar : IBar
{ }
Nun, wenn ich IFoo eine Ausnahme zu lösen versuchen würde geworfen: System.MissingMethodException: Default constructor not found for type Foo
Was ist hier los?
Ich habe auch versucht, einen leeren Konstruktor zu Foo hinzuzufügen, aber dies führt dazu, dass Bar null
ist und zwingt mich, es vom IUnityContainer aufzulösen.
Ihre letzte Bemerkung ist sehr verwirrend - wenn 'container.Resolve()' Werke als Einheit sollten Bar in der Lage ganz gut ... –
Einfache Antwort zu konstruieren - nicht Verwenden Sie Unity für neue Entwicklungen, da es sich um ein [totes Projekt] (https://stackoverflow.com/q/42722926) handelt und Sie sehr wahrscheinlich keine Unterstützung dafür erhalten. Verwenden Sie einen der [~ 35 anderen .NET DI-Container] (https://github.com/danielpalme/IocPerformance), die stattdessen aktiv verwaltet werden. – NightOwl888
Das Problem scheint Ihre Registrierung zu sein, die alle Wörter ignoriert, die Sie verwendeten, es sieht aus, als ob Sie die Forms verwenden, die im Abhängigkeitsservice errichtet werden. Versuchen Sie, die Bar als Bar und nicht als Foo zu registrieren .... auch können wir streiten, bis die Kühe über Eigentum VS Konstruktor Injektion kommen, aber Sie können erreichen, was Sie beide Wege wollen – snowCrabs