2009-05-31 6 views
3

Étant donné qu'une vue utilise un présentateur, vous avez un modèle dans le présentateur.MVP - Injection de dépendances et le modèle

Comment injecter le modèle dans le présentateur? Si je devais l'injecter au niveau de la vue, vous revenez à la case départ avec la logique métier dans la vue - la vue ne doit pas être connue de son modèle.

Un conseil?

Répondre

3

Vous devez faire référence au modèle Passive View. Dans le modèle Contrôleur de supervision, la vue communique avec le modèle pour la synchronisation.

Pour la vue passive Vous avez raison. Vous le feriez généralement dans votre fonction Main ou dans une classe de configuration que vous pourriez appeler depuis Main. Comme aucune langue n'a été spécifiée, j'ai écrit l'exemple en C#.

static void Main(string[] args) 
{ 
    Model model = new Model(); 
    View view = new View(); 
    Presenter presenter = new Presenter(view, model); 
} 

public Presenter(IView view, IModel model) 
{ 
    this.View = view; 
    this.View.Presenter = this; 
    this.Model = model; 
} 

Bien sûr, il s'agit d'une simplification grossière. Dans une application du monde réel, le présentateur dépendra des objets de domaine qui abstraite le modèle et vous utiliserez probablement un conteneur IoC pour gérer la configuration. Certains conteneurs IoC peuvent même gérer des dépendances circulaires dans les paramètres du constructeur, annulant ainsi le besoin d'injection de propriété.

+1

Oui, vous avez raison. C'est la vue passive que j'utilisais. C'est excellent cependant. Je ne peux pas croire que je n'ai pas pensé à tout créer ensemble - comme vous l'avez fait dans votre méthode Main. À la votre – Finglas

Questions connexes