Bonjour,
Je dispose d'une classe qui hérite d'une interface (ITrucDAO) qui elle-même hérite d'une interface générique (IGenDAO) :
L'interface IGenDAO<T> contient la définition :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public interface ITrucDAO : IGenDAO<Truc> {}
Une classe TrucDAO implémente l'interface ITrucDAO, et donc la méthode getAll :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 IList<T> getAll(String param);
Enfin, dans une page ASPX, j'ai déclaré un ObjectDataSource :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IList<Truc> getAll(String param) { ... }
Dans l'évènement OnSelecting, je spécifie le paramètre param1 pour appeller la méthode getAll.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <asp:ObjectDataSource ... DataObjectTypeName="Truc" TypeName="ITrucDAO" SelectMethod="getAll" OnSelecting="ObjectDataSource1_Selecting" ... />
Le problème survient à l'éxecution, au bind du GridView utilisant le ObjectDataSource :
Comme, en virant l'interface générique et définissant directement les méthodes dans l'interface ITrucDAO, ça roule, je comprend bien que le problème vienne du fait que getAll est une méthode générique.ObjectDataSource 'ObjectDataSource1' n'a pas pu trouver une méthode 'getAll' non générique qui a des paramètres : param1.
Mais quand même, en l'occurence, les définitions sont complétées, et l'implémentation correcte, avec les bons types et tout.
Donc ma question est : puis-je spécifier un paramètre, n'importe quoi pour pouvoir faire en sorte que la méthode n'apaisse pas comme générique, ou suis-obligé de recopier dans une 30aine d'interfaces le code que j'ai écrit dans IGenDAO<T> (où tout mettre à Object, et caster à tour de bras) ?
Merci de votre attention et, j'espère, de vos réponses
COMPLEMENT :
J'ai essayé d'utiliser une liste IList non générique, le problème est le même : c'est le fait que IGenDAO<> est générique et que getAll est défini dedans.
Partager