Bonsoir à tous,

Je développe actuellement une application en c# et je me retrouve face à un problème. Je suis avant tout un développeur JAVA et j'ai donc acquis certains réflexes qui me font hésiter quand je programme en c#.


Je souhaite faire un programme en couche : ihm, biz, dao. La communication entre ses couches ne peut se faire qu'au travers d'interfaces. Le but étant d'empêcher la couche biz de connaitre l'implémentation de la couche dao etc.

C'est là que survient mon problème : comment faire pour instancier une classe implémentant une interface sans connaitre le nom de cette classe ?

Un petit exemple pour une meilleure compréhension :
En java, j'ai mon interface Porte dans ma couche BIZ. Elle est accessible depuis la couche IHM.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
public interface Porte {
   public static final Porte INSTANCE = new PorteEnBois();
   public void ouvrir();
   public void fermer();
}
La ligne INSTANCE permet d'implémenter directement la Porte sans trop se peter le c... L'IHM ne voit pas la PorteEnBois mais voit bien l'instance. Donc on peut faire Porte.INSTANCE.ouvrir(); C'est très pratique.

En C#, je ne peux pas mettre de champs dans une interface et donc mon petit "truc" ne fonctionne pas. D'où ma question : comment vous y prendriez-vous pour instancier PorteEnBois sans que l'IHM n'en ait vent ?

Merci d'avance !