Bonjour à tous,

Je suis face à un souci concernant l'archi sur laquelle je travaille.
Souhaitant utiliser au mieux les interfaces et le polymorphisme, je me retrouve dans une situation où j'ai une interface de base, et des interfaces dérivées.
J'ai une fonction par interface dérivée attendant en paramètre un modele de type Iquelquechose mais toutes les fonctions portent le même nom (admettons "Save" pour l'exemple).
Jusque là, tout va bien. Si je fais appel à ma fonction Save en utilisant n'importe quel model à partir du moment où ceux ci implémentent bien une des interfaces, je suis routé vers le bon traitement.

Maintenant, j'ai un souci si jamais je créé une fonction qui va venir ajouter une couche au dessus.
Exemple : Je créé une fonction TraitementMetier qui va commencer par faire un traitement X puis fait appel à la fonction Save puis fait un traitement Y.
Donc ma fonction traitementMetier attend un model de type IBase qui est l'interface mère dont héritent toutes les interfaces citées plus haut.

Si j'execute cette fonction, cela appellera toujours la fonction Save dont le paramètre attend un IBase et ne routera jamais vers les traitements spécifiques des autres interfaces.
Je pense que cela vient du fait que TraitementMetier attendant un paramètre de type IBase, force l'appel à Save(IBase m) mais comment contourner ce problème du coup ?
C'est dommage car cela m'évitais de devoir tester si le type de mon model implémente telle interface alors je force le cast dans ce type sinon si c'est telle autre interface etc...

Auriez vous une idée ?