2017-10-05 4 views
0

Je développe une application Android avec Xamarin. Supposons que j'ai une activité et il dépend d'une interface:Xamarin Android et Dependecy Injection

interface IFoo 
{ 
    // methods 
} 

public class Foo : IFoo 
{ 
    private readonly IBar _bar; 

    public Foo(IBar bar) 
    { 
     _bar = bar; 
    } 

    // methods implementation 
} 
// dependency injection somewhere in Application class 
var container = new UnityContainer(); 
container.RegisterType<IFoo, Foo>(); 

public class MyActivity : Activity 
{ 
    // it's incorrect constructor and this code will not be compiled 
    public MyActivity(IFoo foo) 
    { 
     _foo = foo; 
    } 

    private readonly IFoo _foo; 
} 

Je voudrais injecter instance de IFoo dans le constructeur de MyActivity mais comme vous le savez, il est impossible de créer constructeur avec des paramètres. Comment est-ce que je pourrais passer l'instance initialisée de IFoo avec toutes ses dépendances à MyActivity? J'utilise le framework Unity comme Dependency Injection (mais je peux le changer).

+0

Pourquoi voudriez-vous injecter l'instance de 'IFoo' dans le constructeur de' MyActivity'? Si vous voulez initialiser 'UnityContainer', vous pouvez le faire dans la classe Android' Application'. –

+0

@ YorkShen-MSFT et comment pourrais-je l'utiliser dans la classe d'activité? – Pupkin

Répondre

0

En vous classe app définir:

public static UnityContainer container { get; private set; } 

var container = new UnityContainer(); 

enregistrer votre interface

container.RegisterType<IFoo, Foo>(); 

et résoudre comme ci-dessous

var myFoo = container.Resolve<IFoo>() 

Note: Ne pas oublier d'ajouter l'espace de noms using Microsoft.Practices.Unity;