Est-ce que le code ci-dessous sent? Je refactorise du code et ai découvert cette relation circulaire où foo a besoin d'une classe qui a besoin d'une interface que foo elle-même implémente.Utilisation d'une classe dans son constructeur C# - Est-ce qu'elle sent?
Dans le code réel, foo est un UserControl Silverlight et ifoo a des méthodes pour faire des choses de type UI comme lever une boîte de dialogue (par exemple ShowMessage
). La classe needsAnIfoo
est un (type de) contrôleur qui utilise l'interface ifoo chaque fois qu'il veut faire quoi que ce soit avec l'interface utilisateur. J'ai différentes interfaces utilisateur «thématiques» qui implémentent iFoo et ont le même code de plaque de chaudière dans leur constructeur. Le needsAnIfoo
a diverses propriétés qui sont databound à l'interface utilisateur (donc c'est aussi un modèle aussi.)
Il compile et fonctionne bien, mais je me demande s'il y a une meilleure façon.
Alors, ça sent?
interface ifoo
{
void bar();
}
class foo : ifoo
{
readonly needsAnIfoo _needsAnIfoo;
internal foo()
{
_needsAnIfoo = new needsAnIfoo(this);
}
#region ifoo Members
public void bar()
{
throw new NotImplementedException();
}
#endregion
}
class needsAnIfoo
{
readonly ifoo _myfoo;
public needsAnIfoo(ifoo foo)
{
_myfoo = foo;
}
}
static void Main(string[] args)
{
foo foo = new foo();
}
Peut-être que je devrais le needsAnIfoo
new sans passer le IFoo dans le constructeur et lui donner la iFoo
dans une méthode Initialize
. Mais cela semble très étrange:
foo foo = new foo();
needsAnIfoo needsAnIfoo = new needsAnIfoo(foo);
foo.Initialise(needsAnIfoo);
Merci pour l'exemple! J'ai posté où je dois dans un instant. –
Est-ce qu'un frère peut obtenir un upvote? :) Je commenterai directement sur vos affaires dans un instant ... – Josh
Enfin vous a valu la note! (Je suis en train de passer en revue d'anciens messages et de fusionner des comptes, donc je viens juste de me souvenir de ce post.) –