2010-09-21 35 views
2

Je suis devant un problème de dépendances circulaires classique mais la solution que j'ai trouvée (créer un troisième assemblage) ne semble pas convenir à mon modèle de présentateur de vue.dépendances entre la vue, le présentateur et l'interface

J'ai besoin de faire référence à mon présentateur dans mon ensemble vue que je dois faire référence à mon interface (qui sont dans le même ensemble que le présentateur) dans mon ensemble vue

ok donc je référence mon assemblée présentateur/interface la vue puisqu'ils sont tous au même endroit. Le problème vient maintenant: Je dois référencer ma vue dans mon assembleur de présentation/interfaces pour pouvoir utiliser un de mes types d'affichage (type non-système, contrôle personnalisé) pour définir une propriété et des accesseurs dans mon interface. Je ne peux pas à cause d'une dépendance circulaire, et je pense que même si je déplace mon interface dans un troisième assemblage, j'aurai toujours un CD entre ce nouvel assemblage et la vue (car ma vue nécessite mon interface et mon interface mon point de vue)

l'objectif est de définir une propriété et des accesseurs dans mon interface pour pouvoir accéder à un contrôle à mon avis de mon présentateur donc j'ai besoin d'une référence pour utiliser mon type de contrôle dans l'interface.

Il est pas facile d'être clair alors ne hésitez pas à me demander plus,

Merci beaucoup à l'avance pour tout le monde.

Cordialement.

Répondre

1

En règle générale, les interfaces devraient fonctionner en propre. Lorsque vous avez besoin d'isoler des implémentations (comme dans la référence entre les vues et les présentateurs), vous utilisez une interface. Vous devriez donc avoir une interface de présentation et une interface de visualisation, s'il est nécessaire pour eux de se connaître l'un l'autre plutôt que de connaître l'un l'autre.

Exemple:

Interface.dll:

public interface IMyView { string title; } 
public interface IMyPresenter { string GetTitle(); } 

View.dll:

public MyView : IMyView 
{ 
    private IMyPresenter _myPresenter; 
    public string Title { get { return _myPresenter.GetTitle(); } } 
} 

Presenter.dll:

public MyPresenter : IMyPresenter 
{ 
    private IMyView _myView; 

    public string GetTitle() 
    { 
     return ResourceManager["titleResource"]; 
    } 
} 

Bien dans ma compréhension d'un modèle voir présentateur, ne t Le point de vue ne fait que rendre public tout ce dont le présentateur a besoin, et le point de vue ne connaît pas le présentateur, mais plutôt vous donnez le point de vue au présentateur et il se lie à la vue partout dans le monde.

+0

merci pour le temps que vous avez pris pour la réponse, je vais voir que ce week-end – benj007

+0

je ne suis pas du tout d'accord. Votre donner plus de tâche à "idéalement stupide" vue. Toute cette logique de présentation devrait aller dans le présentateur, et de préférence même le câblage. Imaginez que vous avez une autre application de vue, vous devez faire tous les appels là aussi. Donc pas besoin d'IPresenter. Passez IView au présentateur et laissez-le le gérer. – nawfal