0

Ich bin mir nicht sicher, wie Dependency Injection auf Xamarin Android Projektlösung zu verwenden. Derzeit enthält meine Android-Lösung einen Verweis auf eine andere Klassenbibliothekslösung. Ich habe Unity auf meiner Serviceebene verwendet und den Container über WebApiConfig.cs registriert. Meine Frage ist, wie gehe ich über Unity auf Android-Seite gehen, um beim Start zu starten, wäre dankbar, wenn Code enthalten wäre. Ich möchte den Container nicht durch die Hauptaktivität von Android neu erstellen. Ich möchte, dass sich der Container hinter dem Prozess registriert, z. B. AppStart oder Global asax, wo er es für MVC-Apps ausführt. Gibt es eine Möglichkeit, dies für Android zu tun? Auch habe ich auf Hauptaktivität festgestellt, dass ich keinen Konstruktor erstellen kann. Ich denke, das ist nicht möglich, aber wie kann ich Objektreferenzen auf meine Class Library-Lösung anwenden? Beispiel, das ich versuchte zu tun:Dependency Injection Android

private IExample _ex; 

MainActivity(IExample ex){ 
_ex = ex; //depedency Injection rather than newing it up 
} 

public void DoSomething(){ 
_ex.HelloWorld(); 
} 

Gibt es eine Möglichkeit, es über Attribute zu tun? Auch muss ich für jeden meiner Layer einen Container installieren und erstellen, um die aktuelle Lösungsabhängigkeit zu lösen? Oder kann ich einen Container von Android verwenden, der alle Abhängigkeiten in jeder Schicht auflösen würde, wenn die DDD-Architektur von außen nach innen geht?

Antwort

0

In Bezug auf die DI beim Start der Einrichtung Sie wie so eine benutzerdefinierte Anwendungs ​​Implementierung erstellen:

// Must include this attribute so that Android knows we want to use this as our Application implementation 
[Application(Icon = "@drawable/Icon", Label = "@string/ApplicationName")] 
public class MyApplication : Application 
{ 
    public override void OnCreate() 
    { 
     base.OnCreate(); 

     // Do your DI initialization/registration here 
    } 
} 

ich genau bin nicht sicher, was Sie in der Lage, damit meine nicht einen Konstruktor auf die Haupttätigkeit zu schaffen . Sie können Konstruktoren für jede gewünschte Aktivität erstellen. Sie sehen es jedoch nicht immer, weil Leute ihre Initialisierungslogik in OnCreate setzen.

+0

Hallo, danke für die schnelle Nachricht. Nachdem ich die benutzerdefinierte Anwendung mit ihrer Implementierung erstellt habe, wird die benutzerdefinierte Anwendung zur Laufzeit ausgeführt, ohne dass sie von einer anderen Klasse oder von der Hauptaktivität initialisiert werden muss? –

+0

Sie müssen Android lediglich mitteilen, dass Sie Ihre Klasse als benutzerdefinierte Anwendungsimplementierung verwenden möchten. Sie können dies entweder manuell in der Datei AndroidManifest.xml angeben oder das Attribut [Application ...] verwenden, damit der Compiler es für Sie ausführt. Sobald Sie dies tun, ruft das Betriebssystem beim Start automatisch die OnCreate-Methode auf, ohne dass Sie sie explizit aufrufen müssen. Sie können dann eine "anwendungsweite" Initialisierung wie DI-Setup/Registrierung durchführen. – EJoshuaS